1

私は 2 つの多次元配列を持っており、で発生するarray_intersect値を見つけるために使用しようとしています。代わりに、以下に示すように、結果には最初の配列の両方の値が含まれますが、2 番目の配列には 1 つの値しか含まれていません。この関数がどのように機能するかについて誤解していると思いますが、ここで間違っていることを誰かが明確にすることはできますか?$array1$array2$array1$array2

var_dump($array1);
array(2) {
  [0]=>
  array(1) {
    ["id"]=>
    string(2) "28"
  }
  [7]=>
  array(1) {
    ["id"]=>
    string(2) "30"
  }
}

var_dump($array2);
array(1) {
  [0]=>
  array(1) {
    ["id"]=>
    string(2) "30"
  }
}


var_dump(array_intersect($array1, $array2));
array(2) {
  [0]=>
  array(1) {
    ["id"]=>
    string(2) "28"
  }
  [7]=>
  array(1) {
    ["id"]=>
    string(2) "30"
  }
}
4

2 に答える 2

0

関数 array_intersect は、値を文字列として比較します。マニュアルを参照してください。残念ながら、これはすべての配列に対して単に「配列」を提供します。

Note: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In words: when the string representation
is the same.

代わりに、カスタム比較関数を使用できます。

array_uintersect($array1, $array2, function($a, $b) { return ($a<$b)?-1:($a==$b)?0:1; })

または、順序とタイプも比較したい場合は !== を使用してください。違いについては、こちらを参照してください。

于 2015-10-23T12:57:48.340 に答える
-1

array_intersect_assoc()は、交差のキー値を調べます。

于 2013-01-30T17:34:29.677 に答える