現在の位置: ホーム> 最新記事一覧> Array_intersectを使用してPHPで多次元配列を処理する方法は?共有する特定の方法とケースはありますか?

Array_intersectを使用してPHPで多次元配列を処理する方法は?共有する特定の方法とケースはありますか?

gitbox 2025-09-22

PHPでは、通常、 Array_intersect関数を使用して、2つ以上の配列の交差点を返すために使用されます。ただし、多次元配列を処理する場合、この関数はデフォルトでは1次元配列にのみ適用でき、多次元アレイで交差計算を直接実行することはできません。多次元配列に交差点を実装するには、多くの場合、いくつかの追加の手順が必要です。

1。array_intersectの基本的な使用

まず、 array_intersectの基本的な使用法を理解することが重要です。この関数の構文は次のとおりです。

 <span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> ...</span><span><span class="hljs-variable">$arrays</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>

$ array1$ array2で同じ要素を返し、複数の配列が渡されると、すべての配列の交差部が返されます。

たとえば、2つの1次元配列の交差点:

 <span><span><span class="hljs-variable">$array1</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-variable">$array2</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">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</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><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; </span><span><span class="hljs-number">3</span></span><span>
    [</span><span><span class="hljs-number">3</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

$ array1および$ array2の返された要素はすべて返されます。

2。多次元配列を扱う際の課題

ただし、多次元配列の交差点を処理する場合、 array_intersectのデフォルトの動作は適用されなくなります。最初に多次元配列を「フラット」し、1次元配列に変換してから、交差点操作を実行するか、他の方法で各アイテムを比較する必要があります。

3.解決策: array_maparray_intersectを使用します

多次元配列は、 array_mapを介して1次元配列に変換し、別の配列と交差することができます。ここでは、多次元配列の各要素を処理し、内部構造ではなくこれらの要素の値を比較するようにします。

サンプルケース

2つの多次元配列があり、配列内の各要素が連想配列(またはオブジェクト)であるとします。

 <span><span><span class="hljs-variable">$array1</span></span><span> = [
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tom'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Mickey'</span></span><span>],
];

</span><span><span class="hljs-variable">$array2</span></span><span> = [
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Mickey'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Donald'</span></span><span>],
];
</span></span>

これら2つの配列に同じIDを持つ要素を見つけたいと思います。

ステップ:

  1. array_mapを使用して、各サブアレイのID名前キーを抽出します。

  2. array_intersectを使用して、処理された配列を比較します。

 <span><span><span class="hljs-variable">$array1</span></span><span> = [
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tom'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Mickey'</span></span><span>],
];

</span><span><span class="hljs-variable">$array2</span></span><span> = [
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Mickey'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Donald'</span></span><span>],
];

</span><span><span class="hljs-comment">// 各要素を抽出します 'id' そして 'name' 交差比較の基礎として</span></span><span>
</span><span><span class="hljs-variable">$array1_ids</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$item</span></span><span>) =&gt; </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>], </span><span><span class="hljs-variable">$array1</span></span><span>);
</span><span><span class="hljs-variable">$array2_ids</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$item</span></span><span>) =&gt; </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>], </span><span><span class="hljs-variable">$array2</span></span><span>);

</span><span><span class="hljs-comment">// 2つの配列の交点を計算します(によると id 判断)</span></span><span>
</span><span><span class="hljs-variable">$intersection_ids</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-variable">$array1_ids</span></span><span>, </span><span><span class="hljs-variable">$array2_ids</span></span><span>);

</span><span><span class="hljs-comment">// 交差点の完全な要素を取得します</span></span><span>
</span><span><span class="hljs-variable">$intersection</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, fn(</span><span><span class="hljs-variable">$item</span></span><span>) =&gt; </span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>], </span><span><span class="hljs-variable">$intersection_ids</span></span><span>));

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

出力結果:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] =&gt; </span><span><span class="hljs-number">2</span></span><span>
            [name] =&gt; Jerry
        )

    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] =&gt; </span><span><span class="hljs-number">3</span></span><span>
            [name] =&gt; Mickey
        )
)
</span></span>

説明する:

  1. array_mapを使用して、各要素のIDを抽出し、 ID値を含む2つの1次元配列を生成します。

  2. array_intersectを使用して、2つの配列で同じIDを取得します。

  3. array_filterを使用して、交差のIDに基づいて元の配列から完全な一致する要素を抽出します。

4。拡張:多次元配列内の複数のフィールドの交差点を処理する

複数のフィールド( ID名前など)に基づいて交差比較を実行する場合は、 ARRAY_MAPで複合キー値を使用するか、複数のフィールドを直接比較することができます。

 <span><span><span class="hljs-variable">$array1</span></span><span> = [
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tom'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Mickey'</span></span><span>],
];

</span><span><span class="hljs-variable">$array2</span></span><span> = [
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Jerry'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Mickey'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Donald'</span></span><span>],
];

</span><span><span class="hljs-comment">// 組み合わせ id そして name フィールド,一意の識別子を形成します</span></span><span>
</span><span><span class="hljs-variable">$array1_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$item</span></span><span>) =&gt; </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>], </span><span><span class="hljs-variable">$array1</span></span><span>);
</span><span><span class="hljs-variable">$array2_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$item</span></span><span>) =&gt; </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>], </span><span><span class="hljs-variable">$array2</span></span><span>);

</span><span><span class="hljs-comment">// 交差点の鍵を取得します</span></span><span>
</span><span><span class="hljs-variable">$intersection_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-variable">$array1_keys</span></span><span>, </span><span><span class="hljs-variable">$array2_keys</span></span><span>);

</span><span><span class="hljs-comment">// 交差点の完全な要素を取得します</span></span><span>
</span><span><span class="hljs-variable">$intersection</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, fn(</span><span><span class="hljs-variable">$item</span></span><span>) =&gt; </span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>], </span><span><span class="hljs-variable">$intersection_keys</span></span><span>));

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

出力結果:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] =&gt; </span><span><span class="hljs-number">2</span></span><span>
            [name] =&gt; Jerry
        )

    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] =&gt; </span><span><span class="hljs-number">3</span></span><span>
            [name] =&gt; Mickey
        )
)
</span></span>

説明する:

ここでは、 IDフィールド名前フィールドを文字列( 2ジェリーなど)に結合することにより、複数のフィールドを比較します。 array_intersectは、この組み合わせの一意の識別子を使用して、交差点を見つけます。

5。概要

PHPでは、 array_intersectはデフォルトでマルチディジェンションアレイを直接処理することはできませんが、アレイの平坦化、フィールド値などを組み合わせて、多次元アレイの交差操作を実現するなど、いくつかの処理方法を使用できます。これらの方法を使用すると、多次元配列を柔軟に処理し、ニーズに応じて交差点の部分を見つけることができます。