現在の位置: ホーム> 最新記事一覧> array_intersect_uassocを使用して、ネストされた配列の特定のキー値ペアをフィルタリングする方法は?

array_intersect_uassocを使用して、ネストされた配列の特定のキー値ペアをフィルタリングする方法は?

gitbox 2025-07-26

1。array_intersect_uassocの関数署名を理解します

array_intersect_uassocの基本関数署名は次のとおりです。

 <span><span><span class="hljs-title function_ invoke__">array_intersect_uassoc</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">callable</span></span><span> </span><span><span class="hljs-variable">$key_compare_func</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $ array1、$ array2 :比較する配列。

  • $ key_compare_func :キーを比較するために使用されるコールバック関数。

この関数は、キーと値が等しいときに2つの配列の交点の結果を返します。複数の配列の交差が必要な場合は、より多くの配列パラメーターを提供できます。

2。ユースケース:ネストされた配列で特定のキー価値ペアをフィルター

いくつかの学生情報を含む次のネストされた配列があり、各学生にID名前スコアなどのフィールドがあるとします。特定の条件に基づいて要件を満たす生徒を除外したい:

 <span><span><span class="hljs-variable">$students</span></span><span> = [
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; [</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">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>],
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; [</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">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">90</span></span><span>],
    </span><span><span class="hljs-string">'c'</span></span><span> =&gt; [</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">'Anna'</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">78</span></span><span>],
    </span><span><span class="hljs-string">'d'</span></span><span> =&gt; [</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">'Lucy'</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>]
];
</span></span>

80を超えるスコアの生徒をフィルタリングする場合は、 array_intersect_uassocを介してarrayのキーと値を比較する必要があり、カスタムキー値比較関数を使用して条件付きフィルタリングを実装する必要があります。

3。カスタム比較関数

比較関数を記述して、生徒のスコアが80を超えるかどうかを判断します。この関数は、キーと値の2つのパラメーターを受け取ります。 array_intersect_uassocによって、スコア値に応じてフィルターを塗ります。

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_scores</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$key1</span></span></span><span>, </span><span><span class="hljs-variable">$val1</span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>, </span><span><span class="hljs-variable">$val2</span></span><span>) {
    </span><span><span class="hljs-comment">// 学生のスコアのみに基づく比較</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$val1</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>] &gt; </span><span><span class="hljs-number">80</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>

4。フィルタリングにarray_intersect_uassocを使用します

次に、 array_intersect_uassocを使用して、基準を満たす生徒の配列を除外します。

 <span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect_uassoc</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_scores'</span></span><span>);
</span></span>

上記のコードでは、カスタムCompare_Scores関数に基づいて配列内の特定の要素をフィルタリングするだけであるため、 $ Students Arrayを最初と2番目のパラメーターとして使用します。この関数は、学生のスコアフィールドに従って各要素をフィルタリングします。

5。出力結果

フィルタリングされた結果には、80を超えるスコアの学生に関する情報が含まれます。

 <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>
(
    [a] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] =&gt; </span><span><span class="hljs-number">1</span></span><span>
            [name] =&gt; Tom
            [score] =&gt; </span><span><span class="hljs-number">85</span></span><span>
        )
    [b] =&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
            [score] =&gt; </span><span><span class="hljs-number">90</span></span><span>
        )
    [d] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] =&gt; </span><span><span class="hljs-number">4</span></span><span>
            [name] =&gt; Lucy
            [score] =&gt; </span><span><span class="hljs-number">92</span></span><span>
        )
)
</span></span>

ご覧のとおり、80を超えるスコアの学生のみがスクリーニングされています。