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.
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">'a'</span></span><span> => [</span><span><span class="hljs-string">'id'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Tom'</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>],
</span><span><span class="hljs-string">'b'</span></span><span> => [</span><span><span class="hljs-string">'id'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Jerry'</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">90</span></span><span>],
</span><span><span class="hljs-string">'c'</span></span><span> => [</span><span><span class="hljs-string">'id'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Anna'</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">78</span></span><span>],
</span><span><span class="hljs-string">'d'</span></span><span> => [</span><span><span class="hljs-string">'id'</span></span><span> => </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Lucy'</span></span><span>, </span><span><span class="hljs-string">'score'</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.
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">'score'</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>
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">'compare_scores'</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.
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.