當前位置: 首頁> 最新文章列表> 如何通過PHP array_filter() 函數靈活篩選數組中的特定元素?

如何通過PHP array_filter() 函數靈活篩選數組中的特定元素?

M66 2025-07-29
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// -------------------------------------------------------------</span></span><span>

</span><span><span class="hljs-comment">// PHP array_filter() 函數介紹與靈活篩選應用</span></span><span>

</span><span><span class="hljs-comment">// -------------------------------------------------------------</span></span><span>

<span class="hljs-comment">/**
 * 在 PHP 中,array_filter() 是一個非常強大的內置函數,
 * 它能夠通過回調函數對數組中的元素進行篩選,
 * 返回滿足條件的子數組,從而幫助開發者靈活處理數據。
 * 本文將詳細介紹 array_filter() 的用法及一些實用的篩選技巧。
 */</span>

</span><span><span class="hljs-comment">// 1. 基礎用法:篩選出非空元素</span></span><span>
</span><span><span class="hljs-variable">$input</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-number">2</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-string">'hello'</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>];
</span><span><span class="hljs-variable">$filtered</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$filtered</span></span><span>);
<span class="hljs-comment">/*
結果:
Array
(
    [1] =&gt; 1
    [2] =&gt; 2
    [6] =&gt; hello
)
*/</span>
</span><span><span class="hljs-comment">// 說明:沒有提供回調函數時,array_filter() 默認去除所有“等價於 false”的值。</span></span><span>

</span><span><span class="hljs-comment">// 2. 自定義回調函數篩選特定條件的元素</span></span><span>
</span><span><span class="hljs-variable">$numbers</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-number">6</span></span><span>];
</span><span><span class="hljs-variable">$evenNumbers</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$numbers</span></span><span>, function(</span><span><span class="hljs-variable">$num</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$num</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-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$evenNumbers</span></span><span>);
<span class="hljs-comment">/*
結果:
Array
(
    [1] =&gt; 2
    [3] =&gt; 4
    [5] =&gt; 6
)
*/</span>
</span><span><span class="hljs-comment">// 說明:回調函數返回 true 的元素會被保留,false 的會被過濾掉。</span></span><span>

</span><span><span class="hljs-comment">// 3. 使用鍵名過濾</span></span><span>
</span><span><span class="hljs-variable">$assoc</span></span><span> = [
    </span><span><span class="hljs-string">'apple'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>,
    </span><span><span class="hljs-string">'banana'</span></span><span> =&gt; </span><span><span class="hljs-number">5</span></span><span>,
    </span><span><span class="hljs-string">'cherry'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'date'</span></span><span> =&gt; </span><span><span class="hljs-number">7</span></span><span>,
];
</span><span><span class="hljs-comment">// 只保留鍵名長度大於5的元素</span></span><span>
</span><span><span class="hljs-variable">$filteredByKey</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$assoc</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-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>) &gt; </span><span><span class="hljs-number">5</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">$filteredByKey</span></span><span>);
<span class="hljs-comment">/*
結果:
Array
(
    [banana] =&gt; 5
    [cherry] =&gt; 1
)
*/</span>

</span><span><span class="hljs-comment">// 4. 多層數組篩選示例</span></span><span>
</span><span><span class="hljs-variable">$users</span></span><span> = [
    [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">23</span></span><span>, </span><span><span class="hljs-string">'active'</span></span><span> =&gt; </span><span><span class="hljs-literal">true</span></span><span>],
    [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">30</span></span><span>, </span><span><span class="hljs-string">'active'</span></span><span> =&gt; </span><span><span class="hljs-literal">false</span></span><span>],
    [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Charlie'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">27</span></span><span>, </span><span><span class="hljs-string">'active'</span></span><span> =&gt; </span><span><span class="hljs-literal">true</span></span><span>],
];
</span><span><span class="hljs-comment">// 篩選出年齡大於25且活躍的用戶</span></span><span>
</span><span><span class="hljs-variable">$activeAdults</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$users</span></span><span>, function(</span><span><span class="hljs-variable">$user</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$user</span></span><span>[</span><span><span class="hljs-string">'age'</span></span><span>] &gt; </span><span><span class="hljs-number">25</span></span><span> &amp;&amp; </span><span><span class="hljs-variable">$user</span></span><span>[</span><span><span class="hljs-string">'active'</span></span><span>] === </span><span><span class="hljs-literal">true</span></span><span>;
});
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$activeAdults</span></span><span>);
<span class="hljs-comment">/*
結果:
Array
(
    [2] =&gt; Array
        (
            [name] =&gt; Charlie
            [age] =&gt; 27
            [active] =&gt; 1
        )
)
*/</span>

</span><span><span class="hljs-comment">// 5. 注意事項及性能建議</span></span><span>
</span><span><span class="hljs-comment">// - array_filter 不會重新索引數組,保留原始鍵名。</span></span><span>
</span><span><span class="hljs-comment">// - 如果需要連續索引,可配合 array_values 使用。</span></span><span>
</span><span><span class="hljs-comment">// - 在處理大數組時,盡量簡化回調函數邏輯,避免性能瓶頸。</span></span><span>

</span><span><span class="hljs-comment">// 總結:</span></span><span>
</span><span><span class="hljs-comment">// array_filter() 是 PHP 中篩選數組元素的利器,通過靈活定義回調函數,</span></span><span>
</span><span><span class="hljs-comment">// 可實現各種複雜的篩選需求,提升代碼簡潔度和可讀性。</span></span><span>

</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>