array_search 用于在数组中查找某个值对应的 。例如:
<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">// 结果:$key = 1</span></span><span>
</span></span>
与 array_flip 相比,array_search 可以直接从值查找键,不需要额外翻转数组。但在面对 值重复 或 更复杂的条件匹配 时,单独使用它可能不够灵活。
假设我们有这样一个需求:
有一个包含用户ID和用户名的数组,我们希望根据用户名快速找到对应的ID。
直接看示例:
<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>
如果我们用 array_search 查找 "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">// 结果:$id = 1001 (注意它只返回第一个匹配项)</span></span><span>
</span></span>
问题来了,当数组中存在重复值时,array_search 无法返回所有匹配项。这时候就可以结合 array_flip 来优化。
通过 array_flip 可以将用户名作为键、用户ID作为值,这样查找就会更方便:
<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>
不过,这种方式有个问题:当值(用户名)重复时,array_flip 会覆盖之前的键,只保留最后一个。这时我们就要结合逻辑来处理,比如通过循环或 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">// 结果: [1001, 1004]</span></span><span>
</span></span>
而如果需求是 既要找到第一个匹配的键,又要防止重复被覆盖,我们可以先用 array_search 找第一个,再用 array_keys 获取全部,这样灵活度更高。
相关标签:
array_flip