當前位置: 首頁> 最新文章列表> 利用array_diff() 與數據庫數據比對找出異常記錄

利用array_diff() 與數據庫數據比對找出異常記錄

M66 2025-05-17

array_diff()是PHP 中的一個數組函數,它用於比較兩個或多個數組,並返回第一個數組中不在其他數組中的值。該函數對比的是數組中的,而不是

文法:

 array_diff(array $array1, array $array2, array ...$arrays): array
  • $array1 :第一個數組(用於比較的基準數組)。

  • $array2, ...$arrays :其他數組,可以有多個數組作為參數進行比較。

該函數返回一個包含所有在$array1中出現,但不在$array2及其他數組中出現的元素的數組。

2. 解決問題的背景

假設我們有一個數據庫存儲了用戶的郵箱地址,我們希望通過array_diff()函數比對上傳的郵箱列表與數據庫中的郵箱,快速找出那些上傳了但在數據庫中沒有的郵箱記錄,即異常記錄。

3. 數據庫連接與查詢

我們先建立一個數據庫連接,假設數據庫名為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數組中。

4. 獲取上傳的郵箱數據

接下來,我們模擬一個上傳的郵箱列表,通常這些數據會通過一個表單上傳,並存儲在數組中。

 <?php
// 假設這些是上傳的郵箱數據
$uploadedEmails = [
    'user1@example.com',
    'user2@example.com',
    'user3@example.com',
    'user4@example.com'
];
?>

5. 使用array_diff()函數找出異常記錄

現在我們已經有了數據庫中的郵箱列表$dbEmails和上傳的郵箱列表$uploadedEmails ,我們可以使用array_diff()函數來找出那些在上傳列表中,但不在數據庫中出現的郵箱地址。

 <?php
// 找出在上傳列表中但不在數據庫中的郵箱
$diffEmails = array_diff($uploadedEmails, $dbEmails);

// 輸出異常記錄
if (!empty($diffEmails)) {
    echo "以下郵箱在數據庫中不存在:<br>";
    foreach ($diffEmails as $email) {
        echo $email . "<br>";
    }
} else {
    echo "所有上傳的郵箱都存在於數據庫中。";
}
?>

6. 完整示例代碼

將上面所有代碼結合起來,完整的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 "所有上傳的郵箱都存在於數據庫中。";
}
?>