关联数组上的array_diff仅显示第一个结果而不是全部结果

时间:2014-03-24 10:46:03

标签: php arrays multidimensional-array

这是另一个问题的延续,我忘了问完整的问题。运气,我做了,因为我正要问错误的问题。好的我有以下两个数组

Array ( [idAsset] => 10000005 [AssetName] => HP ) 
Array ( [idAsset] => 10000006 [AssetName] => HP Server ) 
Array ( [idAsset] => 10000009 [AssetName] => HP Laptop ) 
Array ( [idAsset] => 10000010 [AssetName] => Office Printer ) 
Array ( [idAsset] => 10000023 [AssetName] => test ) 




Array ( [idAsset] => 10000023 [AssetName] => test ) 

我使用以下代码

获得了这些代码
  $firstArray = array();
   $secondArray = array();
    do{
    array_push($firstArray,$array1);
    }while($array1 = mysql_fetch_assoc($AssetUp));


do{
array_push($secondArray ,$array2);
 }while($array2 = mysql_fetch_assoc($DocUp));

$array3 = array_diff_key($firstArray, $secondArray);
 print_r($array3);

然而,这给我留下了以下内容:

  Array ( 
  [2] => Array ( [idAsset] => 10000006 [AssetName] => HP Server ) 
  [3] => Array ( [idAsset] => 10000009 [AssetName] => HP Laptop ) 
  [4] => Array ( [idAsset] => 10000010 [AssetName] => Office Printer ) 
  [5] => Array ( [idAsset] => 10000023 [AssetName] => test ) )

似乎是遗漏了第一个循环并且还包括测试资产

我试图留下一个不包含两个阵列中找到的项目的数组。例如,从上面10000023测试将从两个数组中删除,留下我与$ firstArray的前4行(这就是为什么第一个问题会出错)我只想要差异而不是相似之处。

1 个答案:

答案 0 :(得分:0)

我假设,您的数组如下:

$data = array( array( "idAsset" => 10000005, "AssetName" => "HP" ),
               array( "idAsset" => 10000006, "AssetName" => "HP Server" ),
               ... );

array_diff_assoc不会检查任何子数组。因此,在您的情况下,它只会比较您所需要的数字指标。

一个好主意可能是使用您要比较的idAsset作为数组键:

$data = array( "10000005" => array( "idAsset" => 10000005, "AssetName" => "HP" ),
               "10000006" => array( "idAsset" => 10000006, "AssetName" => "HP Server" ),
               ... );

如果您现在通过array_diff_key对它们进行比较,它将仅返回键中的任何差异。因为这是你的标准......voilá

http://de2.php.net/manual/de/function.array-diff-key.php