現在の位置: ホーム> 最新記事一覧> array_filter関数の基本的な使用法とパラメーターは何ですか? array_filterを正しく使用する方法の詳細な分析

array_filter関数の基本的な使用法とパラメーターは何ですか? array_filterを正しく使用する方法の詳細な分析

gitbox 2025-07-26

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>

パラメーター説明:

  1. 配列(必須)
    これは、フィルタリング操作を実行する配列です。

  2. コールバック(オプション)
    これは、配列の各要素が特定の条件を満たすかどうかを決定するコールバック関数です。このパラメーターがnullに設定されている場合、 array_filterはfalsenull0 、空の文字列など、配列内のすべての「空の」値を削除します。

  3. モード(オプション)
    これは、コールバック関数を使用して配列要素を判断する方法を決定する定数です。一般的に使用されるモードは次のとおりです。

    • array_filter_use_key :コールバック関数は、値の代わりに配列のキーを受信します。

    • array_filter_use_both :コールバック関数は、キーと値の両方を受信します。

基本的な使用法

いくつかの一般的なarray_filterの使用例は次のとおりです。

例1:配列で「空の」値を除外します

<span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>

出力:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">5</span></span><span>] =&gt; </span><span><span class="hljs-number">3</span></span><span>
    [</span><span><span class="hljs-meta">6</span></span><span>] =&gt; apple
    [</span><span><span class="hljs-meta">8</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

この例では、 array_filterはfalsenull0 、空の文字列など、すべての「空の」値をフィルターします。

例2:コールバック関数を使用して配列のフィルタリング

<span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>

出力:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

この例では、 array_filterはコールバック関数を使用して、配列内の各要素が偶数であるかどうかを確認します。返品値が真の場合、要素は保持されます。

例3: array_filter_use_keyを使用してキーでフィルタリングします

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
    </span><span><span class="hljs-string">'first'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'second'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
    </span><span><span class="hljs-string">'third'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>,
    </span><span><span class="hljs-string">'fourth'</span></span><span> =&gt; </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">?&gt;</span></span><span>
</span></span>

出力:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">third</span></span><span>] =&gt; </span><span><span class="hljs-number">3</span></span><span>
    [</span><span><span class="hljs-meta">fourth</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

この例は、配列キー、 array_filter_use_keyに基づいてフィルタリングする方法を示しています。コールバック関数は、値ではなく配列のキーを受信します。

例4: array_filter_use_bothを使用して、キーと値の両方を使用します

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
    </span><span><span class="hljs-string">'apple'</span></span><span> =&gt; </span><span><span class="hljs-number">5</span></span><span>,
    </span><span><span class="hljs-string">'banana'</span></span><span> =&gt; </span><span><span class="hljs-number">0</span></span><span>,
    </span><span><span class="hljs-string">'orange'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
    </span><span><span class="hljs-string">'grape'</span></span><span> =&gt; </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> &gt; </span><span><span class="hljs-number">1</span></span><span> &amp;&amp; </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">?&gt;</span></span><span>
</span></span>

出力:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">apple</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
    [</span><span><span class="hljs-meta">orange</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

この例では、 array_filter_use_bothを使用して、コールバック関数がキーと値の両方でフィルタリングできるようにします。結果は、1より大きい値の要素を保持し、キーに文字「a」を含みます。

注意すべきこと

  1. コールバック関数の返品値:
    コールバック関数の返品値は、ブール値またはfalseでなければなりません。 trueが返されると、要素が保持され、 Falseが返されると削除されます。

  2. パフォーマンスに関する考慮事項:
    array_filterは、チェックするために配列全体を通過します。配列が非常に大きく、コールバック関数が複雑な場合、パフォーマンスに影響を与える可能性があります。この場合、コールバック関数を最適化できるか、他のメソッドを使用できるかを検討してください。

  3. キーホールド:
    array_filterは、フィルタリング時に元の配列のキーを保持します。これは、配列から要素を削除すると、結果の配列のキーが再インネックスされないことを意味します。

結論は

array_filterは、さまざまな条件に基づいてアレイ内の要素をフィルタリングするために使用できる非常に強力な機能です。基本的なフィルタリング操作をサポートするだけでなく、柔軟なコールバック関数と複数のモードも提供します。これにより、データの処理時により効率的に役立ちます。 Array_filterを正しく理解して使用すると、特に大規模なデータが処理されるシナリオや特定のフィルタリング条件が必要なシナリオで、コードをより簡潔で効率的にすることができます。