フラット配列内の値に一致する配列行の検索
このシナリオでは、複数の列を持つ配列 $arr1 があり、 2 番目の配列 $arr2 には ID 値のセットが含まれます。目的は、$arr1 をフィルターし、$arr2 に存在する ID 値を含む行のみを返すことです。
この問題の効率的な解決策は、2 つの配列のソートされた交差を実行する array_uintersect() 関数を利用することです。カスタム コールバック関数を使用します。この関数は、両方の入力配列の要素のペアを操作し、比較結果に基づいて -1、0、または 1 を返します。
カスタム コールバック:
カスタムarray_uintersect() 内で定義したコールバック関数は、$arr1 (存在する場合) の ID 列、または列が定義されていない場合は要素自体を $arr2 の値と比較します。
<code class="php">fn($a, $b) => ($a['id'] ?? $a) <=> ($b['id'] ?? $b)</code>
三項使用演算子では、列が存在する場合は $a['id'] を $a に割り当て、列が存在しない場合は $a 自体を割り当てます。同様に、$b についても同じことを行います。これにより、ID 列がすべての行に存在しない場合に対処できます。
並べ替えと効率:
Array_uintersect() は並べ替えを利用して要素を効率的に比較します。デフォルトでは、両方の入力配列を数値的にソートします。 ID 値を比較しているため、この場合は数値である可能性が高く、この並べ替えにより実行時間が短縮されます。
使用例:
このソリューションがどのように機能するかを示すには、次のようにします。これを指定された配列に適用できます:
<code class="php">$arr1 = [ ['key' => 0, 'id' => 14, 'name' => 'bob', 'style' => 'big', 'age' => 33, 'whim' => 'no'], // ... (other rows from $arr1) ]; $arr2 = [14, 72, 8790]; $resultingArray = array_uintersect($arr1, $arr2, $customCallback);</code>
$resultingArray には、ID 値が $arr2 の値と一致する $arr1 の行が含まれます。
以上がフラット配列の値を照合して配列行をフィルタリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。