Array_diff对assoc数组只显示第一个结果,而不是全部


array_diff on assoc array only showing the first result and not all

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

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测试将从两个数组中删除,留下$ firststarray的前4行(这就是为什么第一个问题是错误的),我只想要差异而不是相似之处。

我假设,您的数组如下:

$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比较它们,它将只返回键的差异。既然这是你的标准…瞧

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