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を使用して「アリス」を見つける場合:
<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