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