列値の包含に基づく行のサブセット
複数の列と 2 番目のフラット配列 $arr2 を含む配列 $arr1 を考えます。特定の ID 値が含まれています。目的は、$arr1 をフィルターして、列の値が $arr2 のいずれかの値と一致する行のみを保持することです。
フィルター関数または array_search を使用した以前の試みは失敗したことが判明しています。実際的な解決策には、ネイティブ PHP 関数 array_uintersect() を使用することが含まれます。
この関数は、両方の入力配列内の id 列を評価する (または、存在しない場合はパラメーター値にフォールバックする) 匿名コールバック関数を利用します。比較では、値間の等しいかどうかがチェックされます。
コールバック内では、演算子 =>入力配列変数 $a と $b をキャプチャするために使用され、三項演算子 ?: は null 以外の戻り値を割り当てます。
内部では、array_uintersect は評価プロセス中に並べ替えを実行し、パフォーマンスを最適化し、実行します。 in_array() の反復呼び出しよりも大幅に高速です。
以下のコードは、解決策を示しています。
<code class="php">var_export( array_uintersect( $arr1, $arr2, fn($a, $b) => ($a['id'] ?? $a) <= ($b['id'] ?? $b) ) );</code>
以上が特定の値に一致する列値に基づいて配列行をフィルタリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。