在PHP開發中,經常會遇到需要從一個混合類型的數組中過濾出特定類型的數據,比如我們今天要講的:如何只保留數組中的字符串元素。這時, array_filter()就派上用場了。
array_filter()是PHP內置的數組函數之一,主要用於過濾數組中的元素。它接受一個數組和一個回調函數(可選),返回一個由回調函數返回true的元素組成的新數組。
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$array : 要過濾的數組。
$callback : 用戶自定義函數,用於測試數組中的每個元素。
$mode : 可選參數,用來指定回調函數的參數是鍵、值還是兩者。
下面是一個示例數組,包含了多種類型的元素:
$data = [
"apple",
42,
"banana",
true,
"cherry",
null,
3.14,
["nested", "array"],
(object) ["name" => "grape"]
];
我們的目標是:過濾掉所有非字符串的值,只保留字符串元素。
$filtered = array_filter($data, 'is_string');
print_r($filtered);
Array
(
[0] => apple
[2] => banana
[4] => cherry
)
注意, array_filter()保留原數組的鍵名。如果你想讓結果是一個重新索引的數組,可以使用array_values() :
$filtered = array_values(array_filter($data, 'is_string'));
如果你想擴展邏輯,比如只保留長度大於5的字符串,可以這樣寫:
$filtered = array_filter($data, function($item) {
return is_string($item) && strlen($item) > 5;
});
print_r($filtered);
假設你在處理一個表單數據數組時,需要從中提取用戶填寫的字符串信息:
$userInput = [
'username' => 'john_doe',
'age' => 28,
'email' => 'john@example.com',
'newsletter' => true,
'website' => 'https://m66.net/profile/john'
];
$stringsOnly = array_filter($userInput, 'is_string');
print_r($stringsOnly);
Array
(
[username] => john_doe
[email] => john@example.com
[website] => https://m66.net/profile/john
)
這樣你就可以只處理文本類型的數據,比如用於發送電子郵件或構建數據庫查詢。
使用array_filter()搭配is_string() ,可以非常方便地從一個混合數組中過濾出所有字符串元素。這個方法簡潔、效率高,非常適合日常PHP開發中對數組數據的清洗處理。