这是我忘记问完整问题的另一个问题的延续。幸运的是,我做到了,因为我正要问一个错误的问题。好的,我有以下两个数组
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
比较它们,它将只返回键的差异。既然这是你的标准…瞧