Position actuelle: Accueil> Derniers articles> Comment utiliser Array_INTERSECT_UASSOC pour filtrer des paires de valeurs de clé spécifiques dans des tableaux imbriqués?

Comment utiliser Array_INTERSECT_UASSOC pour filtrer des paires de valeurs de clé spécifiques dans des tableaux imbriqués?

gitbox 2025-07-26

1. Comprendre la signature de la fonction de Array_INTERSECT_UASSOC

La signature de la fonction de base de Array_INTERSECT_UASSOC est la suivante:

 <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 : le tableau à comparer.

  • $ key_compare_func : une fonction de rappel utilisée pour comparer les touches.

Cette fonction renvoie le résultat de l'intersection de deux tableaux lorsque les touches et les valeurs sont égales. Si vous avez besoin de l'intersection de plusieurs tableaux, vous pouvez fournir plus de paramètres de tableau.

2. Cas d'utilisation: Filtrez des paires de valeurs de clé spécifiques dans des tableaux imbriqués

Supposons que vous ayez le tableau imbriqué suivant, qui contient des informations sur les étudiants, et chaque étudiant a des champs tels que l'identification , le nom et le score . Vous souhaitez filtrer les étudiants qui répondent aux exigences en fonction de conditions spécifiques:

 <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>

Si vous souhaitez filtrer les étudiants avec des scores supérieurs à 80, vous devez comparer les clés et les valeurs du tableau via array_intersect_uassoc , et vous devez utiliser une fonction de comparaison de valeurs de clé personnalisée pour implémenter le filtrage conditionnel.

3. Fonction de comparaison personnalisée

Nous rédigerons une fonction de comparaison pour déterminer si le score de l'élève est supérieur à 80. Cette fonction recevra deux paramètres: la clé et la valeur. Par array_INTERSECT_UASSOC , il filtre en fonction de la valeur du 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">// Comparaison basée uniquement sur les scores des étudiants</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. Utilisez Array_INTERSECT_UASSOC pour le filtrage

Ensuite, nous utilisons Array_INTERSECT_UASSOC pour filtrer la gamme d'étudiants qui répondent aux critères:

 <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>

Dans le code ci-dessus, nous utilisons le tableau des étudiants $ comme premier et deuxième paramètres, car nous voulons simplement filtrer des éléments spécifiques dans le tableau en fonction de la fonction Compare_Score personnalisée. Cette fonction filtre chaque élément en fonction du champ de score de l'étudiant.

5. Résultat de sortie

Les résultats filtrés contiendront des informations sur les étudiants avec des scores supérieurs à 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>

La sortie sera:

 <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>

Comme on peut le voir, seuls les étudiants avec des scores supérieurs à 80 ont été dépistés.