PHP の array_diff_assoc() 関数は、キーと値を優先しながら 2 つの配列間の差異を見つけるように設計されています。ペア。ただし、この関数を使用して別の 2D 配列との交差に基づいて 2D 配列から行をフィルタリングすると、必ずしも期待した結果が得られるとは限りません。
問題は次の原因で発生します。 array_diff_assoc() によって実行される厳密な比較。比較中にキーと値のペアの文字列表現を比較します。これは、2 つのキーと値のペアに同じ値が含まれている場合でも、その文字列表現が同一でない限り、それらは等しいとはみなされないことを意味します。
次のサンプル データについて考えてみましょう:
$array1 = [
[12 => 'new q sets'],
[11 => 'common set']
];
$array2 = [
[11 => 'common set']
];
array_diff_assoc() を使用して $array2 の行に基づいて $array1 をフィルタリングしようとすると、不正な出力が得られます:
$output = array_diff_assoc($array1, $array2);
print_r($output);
// Output: [
// [11 => 'common set']
// ]
この出力は、結果に共通の行が存在することを示していますが、意図した出力には $array1.
の排他的な行が含まれている必要があります。 ]前述したように、問題は array_diff_assoc() によって実行される厳密な比較にあります。次の 2 つの配列を比較する場合:
Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )
キーと値のペアは文字列が同一ではないため、この関数は結果として異なるキーと値のペアを返します。
この問題に対処するには、配列内の特定のキーと値の存在をチェックする少し異なるアプローチを使用できます。
$filteredRows = array_filter($array1, function($row) use ($array2) {
return !in_array($row, $array2);
});
print_r($filteredRows);
// Output: [
// [12 => 'new q sets']
// ]
このアプローチでは、in_array() を使用して、$array1 の各行が $array2 に存在するかどうかを確認します。 $array2 に行が存在しない場合、その行はフィルタリングされた結果に含まれます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3