Die grundlegende Funktionssignatur von array_intersect_uassoc lautet wie folgt:
<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 : Das Array zu vergleichen.
$ key_compare_func : Eine Rückruffunktion zum Vergleich von Schlüssel.
Diese Funktion gibt das Ergebnis des Schnittpunkts von zwei Arrays zurück, wenn die Schlüssel und Werte gleich sind. Wenn Sie den Schnittpunkt mehrerer Arrays benötigen, können Sie mehr Array -Parameter bereitstellen.
Angenommen, Sie haben das folgende verschachtelte Array, das einige Studenteninformationen enthält, und jeder Schüler verfügt über Felder wie ID , Name und Punktzahl . Sie möchten Studenten, die die Anforderungen erfüllen, auf der Grundlage bestimmter Bedingungen herausfiltern:
<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>
Wenn Sie Schüler mit Punktzahlen von mehr als 80 herausfiltern möchten, müssen Sie die Schlüssel und Werte des Array über Array_intersect_Uassoc vergleichen und eine benutzerdefinierte Funktion für die Vergleichsmaterial für die kundenspezifische Schlüssellose verwenden, um die bedingte Filterung zu implementieren.
Wir werden eine Vergleichsfunktion schreiben, um festzustellen, ob die Punktzahl des Schülers größer als 80 ist. Diese Funktion erhält zwei Parameter: Schlüssel und Wert. Nach Array_intersect_Uassoc filtert es gemäß den Bewertungswert .
<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">// Vergleich nur auf der Grundlage der Schülerbewertungen</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>
Als nächstes verwenden wir Array_intersect_Uassoc , um die Auswahl der Schüler herauszufiltern, die die Kriterien erfüllen:
<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>
Im obigen Code verwenden wir das $ studentische Array als erste und zweite Parameter, da wir nur bestimmte Elemente im Array basierend auf der Funktion "Custom Compare_Scores" filtern möchten. Diese Funktion filtert jedes Element entsprechend dem Score -Feld des Schülers.
Die gefilterten Ergebnisse enthalten Informationen zu Schülern mit Werten von mehr als 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>
Die Ausgabe wird sein:
<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>
Wie zu sehen ist, wurden nur Studenten mit einer Punktzahl von mehr als 80 überprüft.