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 :用於比較鍵的回調函數。
這個函數返回的是兩個數組在鍵和值都相等的情況下交集的結果。如果你需要多個數組的交集,可以提供更多的數組參數。
假設你有如下嵌套數組,裡麵包含一些學生的信息,每個學生有id 、 name和score等字段,你希望基於特定條件篩選出滿足要求的學生:
<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>
如果你希望從中篩選出分數大於80 的學生,你需要通過array_intersect_uassoc比較數組的鍵和值,並且需要使用一個自定義的鍵值比較函數來實現條件過濾。
我們將編寫一個比較函數,用來判斷學生的分數是否大於80。這個函數將接收兩個參數:鍵和值。通過array_intersect_uassoc ,它會根據score值進行過濾。
<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>] > </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>
接下來,我們使用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>
在上面的代碼中,我們使用了$students數組作為第一個和第二個參數,因為我們只是想根據自定義的compare_scores函數過濾數組中的特定元素。這個函數會根據學生的score字段對每個元素進行篩選。
篩選後的結果將包含分數大於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] => </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>
可以看到,只有score大於80 的學生被篩選出來了。