array_diff/array_diff_assoc/array_diff_key不确定在这种情况下使用什么


array_diff / array_diff_assoc / array_diff_key not sure about what to use in this situation

我有两个具有相同键的数组。我想将数组a与数组b进行比较,并返回不在b中的a的整行数组。我把它们都搞砸了,无法获得所需的结果。我的数组如下:

//array a
Array
(
[0] => Array
    (
        [pid] => 457633
        [name] => Test
        [descr] => sample
        [creator] => 
        [datetime] => 
    )
) 
 //array b
 Array
  (
    [0] => Array
    (
        [pid] => 1234
        [name] => server
        [descr] => server
        [creator] => server
        [datetime] => server
    )
[1] => Array
    (
        [pid] => 12343
        [name] => serv3er
        [descr] => ser3ver
        [creator] => se3rver
        [datetime] => serve3r
    )
)

这是当i array_diff_assoc(b,a)时的结果

 Array
(
[1] => Array
    (
        [pid] => 12343
        [name] => serv3er
        [descr] => ser3ver
        [creator] => se3rver
        [datetime] => serve3r
    )

)

但是当我比较a和b时,它是空白的。

我甚至想更进一步,只比较数组的第一个值(在这种情况下是pid),如果它不在两者中,则返回一行

在这里查看第二个答案:带有多维数组的array_diff()。(几乎是你唯一没有尝试过的变体;-)

使用array_udiff(http://us2.php.net/array_udiff)似乎是最好的解决方案。

这是这两个函数之间的区别:array_diff|array_diff_assoc

你可以比较结果来理解

$a1 = array("a" => "red", "b" => 22, "c" => "blue", "d" => "yellow");
$a2 = array("e" => "red", "b" => 33, "g" => "blue");
$result = array_diff($a1, $a2);
  
  print_r($result);  
  
/*  Output:
  Array
  (
      [b] => 22
      [d] => yellow
  )*/
   
   echo "'n";
   echo "'n";
   
$result = array_diff_assoc($a1, $a2);
  
  print_r($result); 
/*
  Array
  (
      [a] => red
      [b] => 22
      [c] => blue
      [d] => yellow
  )
*/ 

签入链接:https://onecompiler.com/php/3xu58w6mx

更多解释

array_diff_assoc()函数用于将一个数组与另一个数组进行比较,并返回差值。与array_diff()不同,数组键也用于比较。将与其他阵列进行比较的第一个阵列。与第一个数组相比。