在PHP 中,處理和篩選二維數組是一個常見的任務,尤其是在數據量較大時。幸運的是,PHP 提供了幾個非常有用的內置函數,可以幫助我們以高效的方式進行這一操作。在本文中,我們將重點介紹array_filter()和array_column()函數,並展示如何組合它們快速處理和篩選二維數組中的數據。
array_column()函數用於從一個多維數組中提取某個列的值。它非常適用於從二維數組中提取特定列的值。該函數的基本語法如下:
array_column(array $array, mixed $column_key, mixed $index_key = null): array
$array :二維數組。
$column_key :要提取的列的鍵。
$index_key :可選參數,指定返回數組的索引。
舉個例子,我們有一個二維數組,其中每個子數組表示一個用戶的信息:
$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'],
];
我們想要提取所有用戶的name列,可以使用array_column() :
$names = array_column($users, 'name');
print_r($names);
輸出結果將是:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
array_filter()函數用於篩選數組中的元素,返回滿足指定條件的元素。其基本語法如下:
array_filter(array $array, callable $callback, int $mode = 0): array
$array :輸入的數組。
$callback :回調函數,用於對數組的每個元素進行判斷。
$mode :可選參數,決定回調函數如何工作,通常使用默認值0 。
假設我們想要篩選出電子郵件地址中包含m66.net的用戶。可以使用array_filter()來過濾符合條件的用戶。
$filteredUsers = array_filter($users, function($user) {
return strpos($user['email'], 'm66.net') !== false;
});
print_r($filteredUsers);
輸出結果將是:
Array
(
[0] => Array
(
[id] => 1
[name] => Alice
[email] => alice@m66.net
)
[1] => Array
(
[id] => 2
[name] => Bob
[email] => bob@m66.net
)
[2] => Array
(
[id] => 3
[name] => Charlie
[email] => charlie@m66.net
)
)
有時我們需要同時提取特定列並進行過濾。比如,我們想篩選出所有m66.net域名的電子郵件地址,並僅提取這些用戶的姓名。我們可以將array_filter()和array_column()結合使用。
$filteredEmails = array_filter($users, function($user) {
return strpos($user['email'], 'm66.net') !== false;
});
$names = array_column($filteredEmails, 'name');
print_r($names);
輸出結果將是:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
假設我們有一個從API 獲取的用戶數據列表,每個用戶的信息中都包含一個電子郵件地址,我們希望篩選出所有使用m66.net域名的用戶,並從中提取出用戶的姓名和電子郵件地址。
首先,我們通過API 獲取數據,並將其存儲在$users數組中:
$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' => 'david@example.com'],
['id' => 5, 'name' => 'Eve', 'email' => 'eve@m66.net'],
];
接著,使用array_filter()篩選出電子郵件包含m66.net的用戶,並使用array_column()提取出姓名和電子郵件:
$filteredUsers = array_filter($users, function($user) {
return strpos($user['email'], 'm66.net') !== false;
});
$names = array_column($filteredUsers, 'name');
$emails = array_column($filteredUsers, 'email');
print_r($names);
print_r($emails);
輸出結果將是:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
[3] => Eve
)
Array
(
[0] => alice@m66.net
[1] => bob@m66.net
[2] => charlie@m66.net
[3] => eve@m66.net
)
通過這種方式,我們不僅篩選出了符合條件的用戶,還提取出了他們的姓名和電子郵件地址。
以上就是通過array_filter()和array_column()來快速高效地處理和篩選二維數組中的數據的方法。這兩個函數能夠極大提高你的代碼的可讀性和性能,尤其是在處理大數據集時。希望你能在實際項目中靈活運用它們!