在PHP 中,我們經常需要處理多維數組,特別是在從數組中篩選出特定的行時。 PHP 提供了很多實用的函數來幫助我們高效地進行這些操作,其中array_column和array_intersect是非常常用的兩個函數。
array_column函數可以用來獲取多維數組中指定列的值,而array_intersect函數則可以用來查找數組中與另一個數組相交的部分。結合這兩個函數,我們可以很方便地篩選出包含特定值的行。本文將通過一個簡單的例子來展示如何使用這兩個函數進行篩選。
假設我們有一個包含多個用戶信息的多維數組,每個用戶信息都是一個關聯數組。我們需要篩選出所有郵箱地址為example@m66.net的用戶信息。可以使用array_column獲取所有郵箱地址,然後用array_intersect來查找包含特定郵箱地址的行。
<?php
// 用戶數據
$users = [
['id' => 1, 'name' => 'Alice', 'email' => 'alice@m66.net'],
['id' => 2, 'name' => 'Bob', 'email' => 'bob@m66.net'],
['id' => 3, 'name' => 'Charlie', 'email' => 'charlie@m66.net'],
['id' => 4, 'name' => 'David', 'email' => 'example@m66.net'],
['id' => 5, 'name' => 'Eve', 'email' => 'eve@m66.net'],
];
// 需要篩選的特定郵箱地址
$targetEmail = 'example@m66.net';
// 使用 array_column 獲取所有郵箱地址
$emails = array_column($users, 'email');
// 使用 array_intersect 查找與目標郵箱相同的行
$filteredUsers = array_filter($users, function ($user) use ($emails, $targetEmail) {
return in_array($targetEmail, $emails) && $user['email'] === $targetEmail;
});
// 輸出篩選結果
print_r($filteredUsers);
?>
array_column : 該函數用於從多維數組中提取指定的列。在這裡,我們使用array_column($users, 'email')來提取出所有用戶的郵箱地址,並存儲在$emails數組中。
array_intersect : 該函數可以返回數組之間的交集。在這個例子中,我們並沒有直接使用array_intersect來進行數組交集的比較,而是通過in_array來檢查郵箱地址是否存在於目標數組中。如果找到匹配的郵箱地址,我們就返回相應的行。
array_filter : 用於篩選數組,過濾出符合條件的元素。在本例中,我們通過自定義的回調函數來篩選出郵箱地址為'example@m66.net'的行。
當運行上面的代碼時, $filteredUsers數組將只包含郵箱為'example@m66.net'的用戶數據,輸出結果如下: