Array_Search est utilisé pour trouver une valeur correspondant à un tableau. Par exemple:
<span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"orange"</span></span><span>];
</span><span><span class="hljs-variable">$key</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_search</span></span><span>(</span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-comment">// résultat:$key = 1</span></span><span>
</span></span>Par rapport à array_flip , Array_Search peut trouver directement les clés à partir de valeurs sans renverser supplémentaire des tableaux. Mais lorsqu'ils sont confrontés à des valeurs en double ou à une correspondance conditionnelle plus complexe , il peut ne pas être suffisamment flexible pour l'utiliser seul.
Supposons que nous ayons une telle exigence:
Il y a un tableau contenant l'ID utilisateur et le nom d'utilisateur. Nous voulons trouver rapidement l'ID correspondant en fonction du nom d'utilisateur.
Jetons un coup d'œil directement à l'exemple:
<span><span><span class="hljs-variable">$users</span></span><span> = [
</span><span><span class="hljs-number">1001</span></span><span> => </span><span><span class="hljs-string">"Alice"</span></span><span>,
</span><span><span class="hljs-number">1002</span></span><span> => </span><span><span class="hljs-string">"Bob"</span></span><span>,
</span><span><span class="hljs-number">1003</span></span><span> => </span><span><span class="hljs-string">"Charlie"</span></span><span>,
</span><span><span class="hljs-number">1004</span></span><span> => </span><span><span class="hljs-string">"Alice"</span></span><span>
];
</span></span>Si nous utilisons Array_Search pour trouver "Alice" :
<span><span><span class="hljs-variable">$id</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_search</span></span><span>(</span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-variable">$users</span></span><span>);
</span><span><span class="hljs-comment">// résultat:$id = 1001 (Notez qu'il ne renvoie que le premier match)</span></span><span>
</span></span>Le problème est que lorsqu'il y a des valeurs en double dans le tableau, Array_Search ne peut pas renvoyer toutes les correspondances. Pour le moment, vous pouvez combiner array_flip pour optimiser.
Via array_flip, vous pouvez utiliser le nom d'utilisateur comme clé et l'ID utilisateur comme valeur, il sera donc plus pratique de rechercher:
<span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$users</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>Cependant, il y a un problème avec cette méthode: lorsque la valeur (nom d'utilisateur) est répétée, array_flip remplacera la clé précédente et ne conservera que la dernière. À l'heure actuelle, nous devons combiner la logique pour le gérer, comme l'obtention de toutes les correspondances via des boucles ou Array_Keys:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$users</span></span><span>, </span><span><span class="hljs-string">"Alice"</span></span><span>);
</span><span><span class="hljs-comment">// résultat: [1001, 1004]</span></span><span>
</span></span>Si l'exigence est de trouver la première touche correspondante et d'empêcher les doublons d'être écrasés , nous pouvons d'abord utiliser Array_Search pour trouver le premier, puis utiliser Array_keys pour tout obtenir, afin que la flexibilité soit plus élevée.
Étiquettes associées:
array_flip