當前位置: 首頁> 最新文章列表> 想過濾數組中的整數?看看is_int 和array_filter 的高效組合用法

想過濾數組中的整數?看看is_int 和array_filter 的高效組合用法

gitbox 2025-08-27

在PHP 中,處理數組是一項常見的任務,特別是在數據清洗、過濾和轉換的過程中。當你需要從一個混合數組中提取出所有的整數值時,可能會遇到不少挑戰。幸運的是,PHP 提供了強大的工具,使得這個過程既高效又簡單。本文將通過is_intarray_filter函數的組合,展示如何輕鬆地過濾數組中的整數。

1. array_filter簡介

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 :一個回調函數,用於過濾數組中的元素。若回調返回true ,該元素將被保留;返回false ,則該元素被丟棄。

  • $mode :過濾模式,決定回調函數的參數。

若不傳遞$callback參數, array_filter默認會刪除值為false (包括空字符串、0、 null等)的元素。

2. is_int簡介

is_int是一個用於檢查變量是否為整數的PHP 內建函數。其語法如下:

 <span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$var</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $var :待檢查的變量。

  • 返回值:如果$var是整數,返回true ;否則返回false

3. 結合is_intarray_filter實現整數過濾

要過濾數組中的所有整數,最簡單的方式就是將is_intarray_filter結合使用。你只需要提供一個回調函數,讓其調用is_int來檢查每個數組元素是否為整數。

 <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-variable">$array</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'apple'</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3.5</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'banana'</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>];

</span><span><span class="hljs-comment">// 使用 array_filter 和 is_int 過濾出整數</span></span><span>
</span><span><span class="hljs-variable">$integers</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-string">'is_int'</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">$integers</span></span><span>);

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

輸出:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-number">4</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
    [</span><span><span class="hljs-number">6</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
)
</span></span>

在這個例子中, array_filter會遍歷$array數組,並對每個元素調用is_int函數。只有當元素是整數時, is_int返回truearray_filter就會保留該元素。

4. 注意事項

4.1 數值0 和false

如果數組中包含0或者false ,這些元素不會被array_filter過濾掉,除非你明確地告訴它要排除掉這些值。如果你只關心整數類型而不關心值,可以繼續使用is_int過濾。

4.2 其他數字類型

如果你還希望過濾掉浮點數(如3.5 ),可以通過調整回調函數的邏輯來實現。例如,使用is_float進一步過濾。

 <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">$array</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-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>) &amp;&amp; !</span><span><span class="hljs-title function_ invoke__">is_float</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
});
</span></span>

5. 性能優化

array_filter本身是一個高效的函數,能夠處理較大的數據集。如果你有一個龐大的數組需要處理,確保is_int等函數的回調邏輯盡可能簡單,因為回調函數會在每次遍歷時被調用。

如果你對性能有更高的要求,可以嘗試使用原生的foreach循環來手動過濾數組,避免array_filter的一些開銷:

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

</span><span><span class="hljs-variable">$integers</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$item</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>)) {
        </span><span><span class="hljs-variable">$integers</span></span><span>[] = </span><span><span class="hljs-variable">$item</span></span><span>;
    }
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$integers</span></span><span>);

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

6. 結論

通過結合is_intarray_filter ,我們能夠輕鬆而高效地從數組中篩選出所有的整數值。這個方法非常適合需要對數據進行快速清理和過濾的場景。雖然array_filter提供了一種簡潔的語法,但如果你的數組特別龐大, foreach循環可能會提供更好的性能。總的來說,選擇合適的工具和方法,能夠幫助你提高代碼的效率和可讀性。