當前位置: 首頁> 最新文章列表> 使用array_column 和array_filter 獲取指定條件的列

使用array_column 和array_filter 獲取指定條件的列

M66 2025-05-11

在PHP 中, array_columnarray_filter函數是處理數組數據時非常有用的工具,尤其是在需要從一個二維數組中提取符合特定條件的指定列數據時。本文將介紹如何使用這兩個函數來完成此類操作。

array_column函數簡介

array_column函數用於從一個多維數組中提取出某一列的值,並返回一個新數組。它的基本語法如下:

 array_column(array $array, $column_key, $index_key = null): array
  • $array :輸入的多維數組。

  • $column_key :你要提取的列的鍵名。

  • $index_key (可選):如果提供此參數,返回的數組將會使用該鍵作為新數組的鍵。

舉個例子,假設我們有如下的二維數組:

 $data = [
    ['id' => 1, 'name' => 'John', 'age' => 25],
    ['id' => 2, 'name' => 'Jane', 'age' => 30],
    ['id' => 3, 'name' => 'Joe', 'age' => 22],
];

我們可以通過array_column函數提取所有用戶的name列:

 $names = array_column($data, 'name');
print_r($names);

輸出將會是:

 Array
(
    [0] => John
    [1] => Jane
    [2] => Joe
)

array_filter函數簡介

array_filter函數用於過濾數組中的元素,返回符合條件的元素。它的基本語法如下:

 array_filter(array $array, ?callable $callback = null, int $mode = 0): array
  • $array :輸入的數組。

  • $callback :回調函數,用於過濾數組的條件。

  • $mode (可選):過濾的模式, ARRAY_FILTER_USE_KEY用於按鍵過濾, ARRAY_FILTER_USE_BOTH按鍵和值過濾,默認按值過濾。

假設我們希望從前面的數組中篩選出年齡大於24 歲的用戶,可以使用array_filter配合一個回調函數:

 $filteredData = array_filter($data, function($person) {
    return $person['age'] > 24;
});
print_r($filteredData);

輸出將會是:

 Array
(
    [1] => Array
        (
            [id] => 2
            [name] => Jane
            [age] => 30
        )
    [0] => Array
        (
            [id] => 1
            [name] => John
            [age] => 25
        )
)

結合array_columnarray_filter提取符合條件的指定列數據

如果你想要結合array_columnarray_filter來提取符合特定條件的指定列數據,可以先使用array_filter函數來過濾數組,然後再使用array_column函數提取相應的列。

舉個例子,假設我們需要找出所有年齡大於24 歲的用戶的name列:

 $filteredNames = array_column(
    array_filter($data, function($person) {
        return $person['age'] > 24;
    }),
    'name'
);

print_r($filteredNames);

輸出將會是:

 Array
(
    [0] => John
    [1] => Jane
)

這個例子展示瞭如何通過先過濾數據( array_filter )然後提取需要的列( array_column )來得到符合條件的數據。

示例:結合array_columnarray_filter從URL 獲取數據

如果你的數據來源是一個API 或網站的返回結果,通常返回的數據是一個包含多個元素的JSON 對象。例如,假設我們從https://api.m66.net/users獲取了用戶數據,並且我們只關心符合特定條件(如年齡大於24 歲)的用戶名字。你可以像這樣進行操作:

 $url = "https://api.m66.net/users";
$response = file_get_contents($url);
$data = json_decode($response, true);

$filteredNames = array_column(
    array_filter($data, function($person) {
        return $person['age'] > 24;
    }),
    'name'
);

print_r($filteredNames);

在這個示例中,首先通過file_get_contentsm66.net獲取了用戶數據,然後使用array_filter來篩選年齡大於24 歲的用戶,最後通過array_column提取他們的name列。

通過array_columnarray_filter函數的結合,你可以輕鬆地從復雜的二維數組中提取符合條件的特定列數據。這種方法對於處理API 返回的數據、數據庫查詢結果等非常有用,可以大大簡化數據處理的複雜度。