PHP の array_diff_assoc() 関数は、キーと値の優先順位を付けながら 2 つの配列間の差異を見つけるように設計されています。ペア。ただし、この関数を使用して別の 2D 配列との交差に基づいて 2D 配列から行をフィルタリングすると、必ずしも期待した結果が得られるとは限りません。
問題は次の原因で発生します。 array_diff_assoc() によって実行される厳密な比較。比較中にキーと値のペアの文字列表現を比較します。これは、2 つのキーと値のペアに同じ値が含まれている場合でも、その文字列表現が同一でない限り、それらは等しいとはみなされないことを意味します。
次のサンプル データについて考えてみましょう:
<code class="php">$array1 = [ [12 => 'new q sets'], [11 => 'common set'] ]; $array2 = [ [11 => 'common set'] ];</code>
array_diff_assoc() を使用して $array2 の行に基づいて $array1 をフィルターしようとすると、間違った出力が得られます:
<code class="php">$output = array_diff_assoc($array1, $array2); print_r($output); // Output: [ // [11 => 'common set'] // ]</code>
This出力には共通の行が結果に存在することが示されていますが、意図した出力には $array1 の排他的な行が含まれている必要があります。
前述したように、問題はarray_diff_assoc() によって厳密な比較が実行されます。次の 2 つの配列を比較する場合:
<code class="php">Array ( [0] => "Array" [1] => "Array" ) Array ( [0] => "Array" )</code>
キーと値のペアは文字列が同一ではないため、関数は結果として異なるキーと値のペアを返します。
この問題に対処するには、配列内の特定のキーと値の存在をチェックする少し異なるアプローチを使用できます。
<code class="php">$filteredRows = array_filter($array1, function($row) use ($array2) { return !in_array($row, $array2); }); print_r($filteredRows); // Output: [ // [12 => 'new q sets'] // ]</code>
このアプローチでは、in_array() を使用して各行が存在するかどうかをチェックします。 $array1 の内容は $array2 に存在します。 $array2 に行が存在しない場合、その行はフィルタリングされた結果に含まれます。
以上がPHPで別の2D配列との交差に基づいて2D配列から行をフィルタリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。