PHPでは、特にデータクリーニング、フィルタリング、変換中に、処理アレイが一般的なタスクです。混合配列からすべての整数値を抽出する必要がある場合、かなりの課題があるかもしれません。幸いなことに、PHPはプロセスを効率的かつシンプルにする強力なツールを提供します。この記事では、 IS_INTと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>
$配列:保留中の配列。
$ callback :配列内の要素をフィルターするコールバック関数。コールバックがtrueを返す場合、要素は保持されます。 falseが返されると、要素が破棄されます。
$モード:フィルターモード、コールバック関数のパラメーターを決定します。
$ callbackパラメーターが渡されない場合、 array_filterは、デフォルトで偽の値(空の文字列、0、ヌルなどを含む)の要素を削除します。
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を返します。
配列内のすべての整数をフィルタリングする最も簡単な方法は、 array_filterでis_intを使用することです。各配列要素が整数であるかどうかを確認するために、 IS_INTを呼び出すコールバック関数を提供する必要があります。
<span><span><span class="hljs-meta"><?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">?></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>] => </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">2</span></span><span>
[</span><span><span class="hljs-number">4</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span>
[</span><span><span class="hljs-number">6</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span>
)
</span></span>
この例では、 array_filterは$ array配列を繰り返し、各要素のis_int関数を呼び出します。要素が整数である場合にのみ、 is_intがtrueを返し、 array_filterは要素を保持します。
配列に0またはfalseが含まれている場合、これらの要素は、これらの値を除外するように明示的に指示しない限り、array_filterによって除外されません。値ではなく整数型のみを気にする場合は、 IS_INTフィルタリングを引き続き使用できます。
また、フローティングポイント番号( 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>) && !</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>
array_filter自体は、より大きなデータセットを処理できる効率的な関数です。対処するための巨大な配列がある場合は、 IS_INTなどの関数のコールバックロジックが可能な限り単純であることを確認してください。
パフォーマンス要件が高い場合は、Native Foreach Loopsを使用して手動でフィルタリングアレイを使用して、 Array_Filterのオーバーヘッドを避けることができます。
<span><span><span class="hljs-meta"><?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">?></span></span><span>
</span></span>
IS_INTとARRAY_FILTERを組み合わせることにより、配列からすべての整数値を簡単かつ効率的に除外できます。この方法は、データをすばやくクリーニングしてフィルタリングする必要があるシナリオに最適です。 Array_Filterはクリーンな構文を提供しますが、Arrayが特に大きい場合、 Foreachループはより良いパフォーマンスを提供する場合があります。一般に、適切なツールと方法を選択すると、コードの効率と読みやすさを改善することができます。
関連タグ:
array_filter