Position actuelle: Accueil> Derniers articles> [Comment combiner les fonctions Array_flip et Array_Search pour effectuer des opérations de recherche complexes de tableau? 】

[Comment combiner les fonctions Array_flip et Array_Search pour effectuer des opérations de recherche complexes de tableau? 】

gitbox 2025-09-18

2. Le rôle de Array_Search

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.


3. La signification de l'utilisation combinée

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> =&gt; </span><span><span class="hljs-string">"Alice"</span></span><span>,
    </span><span><span class="hljs-number">1002</span></span><span> =&gt; </span><span><span class="hljs-string">"Bob"</span></span><span>,
    </span><span><span class="hljs-number">1003</span></span><span> =&gt; </span><span><span class="hljs-string">"Charlie"</span></span><span>,
    </span><span><span class="hljs-number">1004</span></span><span> =&gt; </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&#39;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.


Iv. Exemples de solution

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.