array_diff()是PHP 中的一個數組函數,它用於比較兩個或多個數組,並返回第一個數組中不在其他數組中的值。該函數對比的是數組中的,而不是鍵。
文法:
array_diff(array $array1, array $array2, array ...$arrays): array
$array1 :第一個數組(用於比較的基準數組)。
$array2, ...$arrays :其他數組,可以有多個數組作為參數進行比較。
該函數返回一個包含所有在$array1中出現,但不在$array2及其他數組中出現的元素的數組。
假設我們有一個數據庫存儲了用戶的郵箱地址,我們希望通過array_diff()函數比對上傳的郵箱列表與數據庫中的郵箱,快速找出那些上傳了但在數據庫中沒有的郵箱記錄,即異常記錄。
我們先建立一個數據庫連接,假設數據庫名為user_db ,其中有一個表users ,表中有一個字段email存儲用戶的郵箱。
<?php
// 數據庫連接信息
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "user_db";
// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢查連接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 查詢數據庫中的所有郵箱
$sql = "SELECT email FROM users";
$result = $conn->query($sql);
// 將數據庫中的郵箱存入一個數組
$dbEmails = [];
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$dbEmails[] = $row['email'];
}
}
$conn->close();
?>
在這段代碼中,我們首先連接到數據庫user_db ,然後從users表中獲取所有的郵箱地址,將它們存入$dbEmails數組中。
接下來,我們模擬一個上傳的郵箱列表,通常這些數據會通過一個表單上傳,並存儲在數組中。
<?php
// 假設這些是上傳的郵箱數據
$uploadedEmails = [
'user1@example.com',
'user2@example.com',
'user3@example.com',
'user4@example.com'
];
?>
現在我們已經有了數據庫中的郵箱列表$dbEmails和上傳的郵箱列表$uploadedEmails ,我們可以使用array_diff()函數來找出那些在上傳列表中,但不在數據庫中出現的郵箱地址。
<?php
// 找出在上傳列表中但不在數據庫中的郵箱
$diffEmails = array_diff($uploadedEmails, $dbEmails);
// 輸出異常記錄
if (!empty($diffEmails)) {
echo "以下郵箱在數據庫中不存在:<br>";
foreach ($diffEmails as $email) {
echo $email . "<br>";
}
} else {
echo "所有上傳的郵箱都存在於數據庫中。";
}
?>
將上面所有代碼結合起來,完整的PHP 程序如下:
<?php
// 數據庫連接信息
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "user_db";
// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢查連接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 查詢數據庫中的所有郵箱
$sql = "SELECT email FROM users";
$result = $conn->query($sql);
// 將數據庫中的郵箱存入一個數組
$dbEmails = [];
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$dbEmails[] = $row['email'];
}
}
$conn->close();
// 假設這些是上傳的郵箱數據
$uploadedEmails = [
'user1@example.com',
'user2@example.com',
'user3@example.com',
'user4@example.com'
];
// 找出在上傳列表中但不在數據庫中的郵箱
$diffEmails = array_diff($uploadedEmails, $dbEmails);
// 輸出異常記錄
if (!empty($diffEmails)) {
echo "以下郵箱在數據庫中不存在:<br>";
foreach ($diffEmails as $email) {
echo $email . "<br>";
}
} else {
echo "所有上傳的郵箱都存在於數據庫中。";
}
?>