在PHP中, array_filter函數是一個非常實用的工具,它用於過濾數組中的元素,基於給定的回調函數返回的布爾值來決定是否保留該元素。這個函數常常被用於從數組中剔除不符合條件的元素,或者基於某些邏輯提取數據。
<span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array</span></span><span>, ?</span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$callback</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$mode</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
array (必需)
這是你想要進行過濾操作的數組。
callback (可選)
這是一個回調函數,用於判斷數組的每個元素是否滿足某個條件。如果該參數被設置為null , array_filter將會去除數組中的所有“空”值,如false , null , 0 , 空字符串等。
mode (可選)
這是一個常量,用於決定如何使用回調函數來判斷數組元素。常用的模式有:
ARRAY_FILTER_USE_KEY :回調函數接收數組的鍵而不是值。
ARRAY_FILTER_USE_BOTH :回調函數同時接收鍵和值。
下面是一些常見的array_filter使用示例:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'apple'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
輸出:
<span><span>Array
(
[</span><span><span class="hljs-meta">1</span></span><span>] => </span><span><span class="hljs-number">1</span></span><span>
[</span><span><span class="hljs-meta">3</span></span><span>] => </span><span><span class="hljs-number">2</span></span><span>
[</span><span><span class="hljs-meta">5</span></span><span>] => </span><span><span class="hljs-number">3</span></span><span>
[</span><span><span class="hljs-meta">6</span></span><span>] => apple
[</span><span><span class="hljs-meta">8</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>
在這個示例中, array_filter過濾掉了所有值為false 、 null 、 0 、空字符串等“空”值。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>, function(</span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span> % </span><span><span class="hljs-number">2</span></span><span> == </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// 只保留偶數</span></span><span>
});
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
輸出:
<span><span>Array
(
[</span><span><span class="hljs-meta">1</span></span><span>] => </span><span><span class="hljs-number">2</span></span><span>
[</span><span><span class="hljs-meta">3</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>
在這個例子中, array_filter使用一個回調函數來檢查數組中的每個元素是否是偶數,返回值為true時,元素就會被保留。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
</span><span><span class="hljs-string">'first'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-string">'second'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>,
</span><span><span class="hljs-string">'third'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>,
</span><span><span class="hljs-string">'fourth'</span></span><span> => </span><span><span class="hljs-number">4</span></span><span>
];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>, function(</span><span><span class="hljs-variable">$key</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-string">'t'</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// 只保留鍵以't'開頭的元素</span></span><span>
}, ARRAY_FILTER_USE_KEY);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
輸出:
<span><span>Array
(
[</span><span><span class="hljs-meta">third</span></span><span>] => </span><span><span class="hljs-number">3</span></span><span>
[</span><span><span class="hljs-meta">fourth</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>
這個例子演示瞭如何根據數組鍵進行過濾, ARRAY_FILTER_USE_KEY讓回調函數接收數組的鍵而不是值。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
</span><span><span class="hljs-string">'apple'</span></span><span> => </span><span><span class="hljs-number">5</span></span><span>,
</span><span><span class="hljs-string">'banana'</span></span><span> => </span><span><span class="hljs-number">0</span></span><span>,
</span><span><span class="hljs-string">'orange'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>,
</span><span><span class="hljs-string">'grape'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>
];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>, function(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span> > </span><span><span class="hljs-number">1</span></span><span> && </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-string">'a'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>; </span><span><span class="hljs-comment">// 保留值大於1且鍵中包含'a'的元素</span></span><span>
}, ARRAY_FILTER_USE_BOTH);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
輸出:
<span><span>Array
(
[</span><span><span class="hljs-meta">apple</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span>
[</span><span><span class="hljs-meta">orange</span></span><span>] => </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>
此示例使用ARRAY_FILTER_USE_BOTH ,讓回調函數同時使用鍵和值進行過濾操作。結果會保留值大於1且鍵中包含字母'a' 的元素。
回調函數的返回值:
回調函數的返回值必須是布爾值true或false 。如果返回true ,則該元素會被保留,返回false時則會被剔除。
性能考慮:
array_filter會遍歷整個數組進行檢查。如果數組非常大,且回調函數很複雜,可能會影響性能。在這種情況下,考慮是否可以優化回調函數,或者使用其他方法。
鍵的保持:
array_filter在過濾時會保持原始數組的鍵。這意味著如果你從數組中剔除了元素,結果數組中的鍵將不會重新索引。
array_filter是一個非常強大的函數,可以用來根據各種條件過濾數組中的元素。它不僅支持基本的過濾操作,還提供了靈活的回調函數和多種模式,能夠幫助你在處理數據時更加高效。理解和正確使用array_filter可以讓你的代碼更加簡潔和高效,尤其是在處理大規模數據或需要特定過濾條件的場景中。
相關標籤:
array_filter