Current Location: Home> Latest Articles> How to Use array_intersect_uassoc to Filter Specific Key-Value Pairs in Nested Arrays?

How to Use array_intersect_uassoc to Filter Specific Key-Value Pairs in Nested Arrays?

gitbox 2025-07-26

1. Understanding the array_intersect_uassoc Function Signature

The basic function signature of array_intersect_uassoc is as follows:

<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: Arrays to compare.

  • $key_compare_func: A callback function used to compare the keys.

This function returns the intersection of the two arrays where both the keys and values are equal. If you need to compare more arrays, you can pass additional ones as arguments.

2. Use Case: Filtering Specific Key-Value Pairs in Nested Arrays

Suppose you have the following nested array containing student information, where each student has an id, name, and score. You want to filter out students who meet a specific condition:

<span><span><span class="hljs-variable">$students</span></span><span> = [
    </span><span><span class="hljs-string">&#039;a&#039;</span></span><span> => [</span><span><span class="hljs-string">&#039;id&#039;</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">&#039;name&#039;</span></span><span> => </span><span><span class="hljs-string">&#039;Tom&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;score&#039;</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>],
    </span><span><span class="hljs-string">&#039;b&#039;</span></span><span> => [</span><span><span class="hljs-string">&#039;id&#039;</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">&#039;name&#039;</span></span><span> => </span><span><span class="hljs-string">&#039;Jerry&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;score&#039;</span></span><span> => </span><span><span class="hljs-number">90</span></span><span>],
    </span><span><span class="hljs-string">&#039;c&#039;</span></span><span> => [</span><span><span class="hljs-string">&#039;id&#039;</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">&#039;name&#039;</span></span><span> => </span><span><span class="hljs-string">&#039;Anna&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;score&#039;</span></span><span> => </span><span><span class="hljs-number">78</span></span><span>],
    </span><span><span class="hljs-string">&#039;d&#039;</span></span><span> => [</span><span><span class="hljs-string">&#039;id&#039;</span></span><span> => </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">&#039;name&#039;</span></span><span> => </span><span><span class="hljs-string">&#039;Lucy&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;score&#039;</span></span><span> => </span><span><span class="hljs-number">92</span></span><span>]
];
</span></span>

If you want to filter out students with scores above 80, you’ll need to use array_intersect_uassoc to compare the array keys and values, and use a custom key comparison function to apply the condition.

3. Custom Comparison Function

We'll write a comparison function that checks if the student's score is above 80. This function takes two parameters: key and value. Through array_intersect_uassoc, it filters based on the score value.

<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">// Compare only based on the student's score</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">&#039;score&#039;</span></span><span>] > </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. Filtering with array_intersect_uassoc

Now, use array_intersect_uassoc to filter students based on the custom condition:

<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">&#039;compare_scores&#039;</span></span><span>);
</span></span>

In the example above, we're using the $students array for both parameters because we only want to filter the array based on the compare_scores function. This function filters each item according to its score field.

5. Output Result

The filtered result will contain only the students with scores greater than 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>

The output will be:

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [a] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] => </span><span><span class="hljs-number">1</span></span><span>
            [name] => Tom
            [score] => </span><span><span class="hljs-number">85</span></span><span>
        )
    [b] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] => </span><span><span class="hljs-number">2</span></span><span>
            [name] => Jerry
            [score] => </span><span><span class="hljs-number">90</span></span><span>
        )
    [d] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [id] => </span><span><span class="hljs-number">4</span></span><span>
            [name] => Lucy
            [score] => </span><span><span class="hljs-number">92</span></span><span>
        )
)
</span></span>

As you can see, only the students whose score is greater than 80 have been included in the result.