En PHP, la fonction Array_INTERSECT est généralement utilisée pour retourner l'intersection de deux tableaux ou plus. Cependant, lors du traitement des tableaux multidimensionnels, cette fonction ne s'applique qu'aux tableaux unidimensionnels par défaut et ne peut pas effectuer directement des calculs d'intersection sur les tableaux multidimensionnels. Afin d'implémenter les intersections dans des tableaux multidimensionnels, certaines étapes supplémentaires sont souvent nécessaires.
Tout d'abord, il est important de comprendre l'utilisation de base de Array_INTERSECT . La syntaxe de cette fonction est la suivante:
<span><span><span class="hljs-title function_ invoke__">array_intersect</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">array</span></span><span> ...</span><span><span class="hljs-variable">$arrays</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>Il renvoie les mêmes éléments dans $ array1 et $ array2 , et lorsque plusieurs tableaux sont passés, la partie d'intersection dans tous les tableaux sera retournée.
Par exemple, l'intersection de deux tableaux unidimensionnels:
<span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>);
</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>
(
[</span><span><span class="hljs-number">2</span></span><span>] => </span><span><span class="hljs-number">3</span></span><span>
[</span><span><span class="hljs-number">3</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>Les éléments retournés dans $ array1 et $ array2 sont tous retournés.
Cependant, lorsque nous voulons gérer l'intersection des tableaux multidimensionnels, le comportement par défaut de Array_INTERSECT ne s'applique plus. Nous devons d'abord "plat" le tableau multidimensionnel, le convertir en un tableau unidimensionnel, puis effectuer des opérations d'intersection ou comparer chaque élément d'autres manières.
Un tableau multidimensionnel peut être converti en un tableau unidimensionnel via Array_Map et se croisé avec un autre tableau. Ici, nous traiterons chaque élément d'un tableau multidimensionnel, garantissant que nous comparons les valeurs de ces éléments plutôt que leur structure interne.
Supposons que nous ayons deux tableaux multidimensionnels, chaque élément du tableau est un tableau (ou objet) associatif:
<span><span><span class="hljs-variable">$array1</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">'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">'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">'Mickey'</span></span><span>],
];
</span><span><span class="hljs-variable">$array2</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">'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">'Mickey'</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">'Donald'</span></span><span>],
];
</span></span>Nous voulons trouver des éléments avec le même ID dans ces deux tableaux.
Utilisez Array_Map pour extraire les touches ID et NAME de chaque sous-réseau.
Utilisez Array_INTERSECT pour comparer les tableaux traités.
<span><span><span class="hljs-variable">$array1</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">'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">'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">'Mickey'</span></span><span>],
];
</span><span><span class="hljs-variable">$array2</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">'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">'Mickey'</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">'Donald'</span></span><span>],
];
</span><span><span class="hljs-comment">// Extraire de chaque élément 'id' et 'name' Comme base de la comparaison de l'intersection</span></span><span>
</span><span><span class="hljs-variable">$array1_ids</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$item</span></span><span>) => </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>], </span><span><span class="hljs-variable">$array1</span></span><span>);
</span><span><span class="hljs-variable">$array2_ids</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$item</span></span><span>) => </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>], </span><span><span class="hljs-variable">$array2</span></span><span>);
</span><span><span class="hljs-comment">// Calculez l'intersection de deux tableaux(selon id Jugement)</span></span><span>
</span><span><span class="hljs-variable">$intersection_ids</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-variable">$array1_ids</span></span><span>, </span><span><span class="hljs-variable">$array2_ids</span></span><span>);
</span><span><span class="hljs-comment">// Obtenez l'élément complet de l'intersection</span></span><span>
</span><span><span class="hljs-variable">$intersection</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, fn(</span><span><span class="hljs-variable">$item</span></span><span>) => </span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>], </span><span><span class="hljs-variable">$intersection_ids</span></span><span>));
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$intersection</span></span><span>);
</span></span>Résultat de sortie:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">1</span></span><span>] => </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
)
[</span><span><span class="hljs-number">2</span></span><span>] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[id] => </span><span><span class="hljs-number">3</span></span><span>
[name] => Mickey
)
)
</span></span>Utilisez Array_Map pour extraire l'ID de chaque élément et générez deux tableaux unidimensionnels contenant des valeurs d'ID .
Utilisez Array_INTERSECT pour obtenir le même ID en deux tableaux.
Utilisez Array_Filter pour extraire les éléments de correspondance complets du tableau d'origine en fonction de l'ID de l'intersection.
Si vous souhaitez effectuer des comparaisons d'intersection en fonction de plusieurs champs (tels que l'ID et le nom ), vous pouvez utiliser des valeurs de clés composées dans array_map ou comparer directement plusieurs champs:
<span><span><span class="hljs-variable">$array1</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">'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">'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">'Mickey'</span></span><span>],
];
</span><span><span class="hljs-variable">$array2</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">'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">'Mickey'</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">'Donald'</span></span><span>],
];
</span><span><span class="hljs-comment">// combinaison id et name Champs,Former un identifiant unique</span></span><span>
</span><span><span class="hljs-variable">$array1_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$item</span></span><span>) => </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>], </span><span><span class="hljs-variable">$array1</span></span><span>);
</span><span><span class="hljs-variable">$array2_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$item</span></span><span>) => </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>], </span><span><span class="hljs-variable">$array2</span></span><span>);
</span><span><span class="hljs-comment">// Obtenez la clé de l'intersection</span></span><span>
</span><span><span class="hljs-variable">$intersection_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-variable">$array1_keys</span></span><span>, </span><span><span class="hljs-variable">$array2_keys</span></span><span>);
</span><span><span class="hljs-comment">// Obtenez l'élément complet de l'intersection</span></span><span>
</span><span><span class="hljs-variable">$intersection</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, fn(</span><span><span class="hljs-variable">$item</span></span><span>) => </span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$item</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>], </span><span><span class="hljs-variable">$intersection_keys</span></span><span>));
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$intersection</span></span><span>);
</span></span>Résultat de sortie:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">1</span></span><span>] => </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
)
[</span><span><span class="hljs-number">2</span></span><span>] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[id] => </span><span><span class="hljs-number">3</span></span><span>
[name] => Mickey
)
)
</span></span>Ici, nous comparons plusieurs champs en combinant les champs d'identification et de nom dans une chaîne (comme 2-Jerry ). Array_INTERSECT utilise l'identifiant unique de cette combinaison pour trouver l'intersection.
En PHP, Array_Intersect ne peut pas traiter directement les tableaux multidimensionnels par défaut, mais nous pouvons utiliser certaines méthodes de traitement, telles que les tableaux d'aplatissement, la combinaison des valeurs de champ, etc. pour réaliser le fonctionnement d'intersection des tableaux multidimensionnels. Avec ces méthodes, vous pouvez traiter de manière flexible des tableaux multidimensionnels et trouver la partie d'intersection en fonction de vos besoins.