array_search is used to find the key corresponding to a value in an array. For example:
<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">// Result: $key = 1</span></span><span>
</span></span>
Compared to array_flip, array_search can directly find the key from a value without flipping the array. However, when dealing with duplicate values or more complex matching conditions, using it alone may not be flexible enough.
Suppose we have the following requirement:
An array contains user IDs and usernames, and we want to quickly find the corresponding ID based on the username.
Here’s an example:
<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>
If we use array_search to look up "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">// Result: $id = 1001 (Note it only returns the first match)</span></span><span>
</span></span>
Here’s the issue: when duplicate values exist in the array, array_search cannot return all matches. This is where combining it with array_flip becomes useful.
With array_flip, we can use usernames as keys and user IDs as values, making lookups more convenient:
<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>
However, there’s a problem: when values (usernames) are duplicated, array_flip will overwrite previous keys and only keep the last one. To handle this, we can add logic, such as using a loop or array_keys to get all matches:
<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">// Result: [1001, 1004]</span></span><span>
</span></span>
If the requirement is to find the first matching key while also avoiding overwrites, we can first use array_search to find the first match, and then use array_keys to retrieve all of them. This approach provides more flexibility.
Related Tags:
array_flip