1

私は2つの配列を持っており、違いを取得するためにarray_diff_assoc() php関数を使用していますが、常に違いとして通信セットを返しますが、新しいqセットである必要があります。

配列--

Array ( [0] => Array ( [12] => new q sets ) [1] => Array ( [11] => common set ) ) 

Array ( [0] => Array ( [11] => common set ) ) 

array_diff_assoc()opを使用した後

Array ( [1] => Array ( [11] => common set ) ) 
4

3 に答える 3

6

キー=>値のペアからの2つの値は、がの場合にのみ等しいと見なされます(string) $elem1 === (string) $elem2。言い換えると、厳密なチェックが行われるため、文字列表現は同じである必要があります。

http://php.net/manual/en/function.array-diff-assoc.php

(string)配列の値はです"Array"したがって、への呼び出しarray_diff_assocは、これら2つのことを効果的に比較しています。

Array ( [0] => "Array" [1] => "Array" ) 
Array ( [0] => "Array" ) 

これら2つの間で異なるのは[1]、最初の配列のキーと値のペアであるため、それを取り戻します([1] => Array( [11] => common set ))。

于 2012-03-27T07:49:57.603 に答える
1

array_diff_assoc()では、キーも比較されます。[0]は2番目の配列で使用可能であり、[1]は2番目の配列では使用できないため、結果はArray([1] => Array([11] => common set))になります。

于 2012-03-27T07:52:52.683 に答える
0

最新のphp環境でスクリプトを実行する場合、警告は、ジョブに間違ったツールを使用していることを示しているはずです。

悪いコード:(デモ

$array1 = [[12 => 'new q sets'], [11 => 'common set']];
$array2 = [[11 => 'common set']];

var_export(array_diff_assoc($array1, $array2));

悪い出力:

Warning: Array to string conversion in /in/jIUcq on line 6

Warning: Array to string conversion in /in/jIUcq on line 6
array (
  1 => 
  array (
    11 => 'common set',
  ),
)

関連する/一致する行の第1レベルのインデックスが異なる可能性があるため、実際には第1レベルのインデックスを比較する必要はありません。


代わりに、を使用array_udiff()して関連行を比較する必要があります(最初のレベルのキーは無視してください)。array_udiff()「宇宙船演算子」を使用すると、関数呼び出しを繰り返さずに、コールバックから予想されるように、3者間比較を行うことができます。以下のスニペットで、データの行$a$b表します。

適切なコード:(デモ

var_export(
    array_udiff($array1, $array2, fn($a, $b) => $a <=> $b)
);

適切な出力:

array (
  0 => 
  array (
    12 => 'new q sets',
  ),
)
于 2022-02-20T23:13:21.627 に答える