我有两个数组
$a1 = Array
(
[0] => Array
(
[value] => 70,
[unit] => kilogram(kg),
[status] => active
),
[1] => Array
(
[value] => 80,
[unit] => kilogram(kg),
[status] => inactive
),
[2] => Array
(
[value] => 67,
[unit] => gram(g),
[status] => active
),
[3] => Array
(
[value] => 54,
[unit] => gram(g),
[status] => inactive
)
);
第二个数组是:
$a2 = Array
(
[0] => Array
(
[value] => 70,
[unit] => kilogram(kg),
[status] => active
),
[1] => Array
(
[value] => 80,
[unit] => kilogram(kg),
[status] => inactive
),
[2] => Array
(
[value] => 67,
[unit] => gram(g),
[status] => active
),
[3] => Array
(
[value] => 54,
[unit] => gram(g),
[status] => inactive
),
[4] => Array
(
[value] => 50,
[unit] => kilogram(kg),
[status] => active
)
);
我想要得到两个数组之间的差异。即缺少数组中的值。
我使用了array_diff,但是返回的错误是:
array_diff行上的数组到字符串的转换
任何人都有解决方案。
答案 0 :(得分:2)
请尝试以下代码:
<?php
function arrayRecursiveDiff($aArray1, $aArray2) {
$aReturn = array();
foreach($aArray1 as $mKey => $mValue) {
if(array_key_exists($mKey, $aArray2)) {
if(is_array($mValue)) {
$aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
if(count($aRecursiveDiff)) {
$aReturn[$mKey] = $aRecursiveDiff;
}
}
else {
if($mValue != $aArray2[$mKey]) {
$aReturn[$mKey] = $mValue;
}
}
}
else {
$aReturn[$mKey] = $mValue;
}
}
return $aReturn;
}
$a1 = [
["value" => 70, "unit" => "kilogram(kg)", "status" => "active"],
["value" => 80, "unit" => "kilogram(kg)", "status" => "inactive"],
["value" => 67, "unit" => "gram(g)", "status" => "active"],
["value" => 54, "unit" => "gram(g)", "status" => "inactive"]
];
$a2 = [
["value" => 70, "unit" => "kilogram(kg)", "status" => "active"],
["value" => 80, "unit" => "kilogram(kg)", "status" => "inactive"],
["value" => 67, "unit" => "gram(g)", "status" => "active"],
["value" => 54, "unit" => "gram(g)", "status" => "inactive"],
["value" => 50, "unit" => "kilogram(kg)", "status" => "active"]
];
$arrdiff = arrayRecursiveDiff($a2, $a1);
echo "<pre>";
print_r($arrdiff);
?>
希望这对您有所帮助。
答案 1 :(得分:1)
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}
$aDiff = array_diff_ukey($a1, $a2, 'key_compare_func');
答案 2 :(得分:0)
有多种方法可以实现,这是其中一种,我假设您要检查给定数组中的字段value
。
$arr1 = [["value" => 70,"unit" => "kilogram(kg)","status" => "active"],["value" => 71,"unit" => "kilogram(kg)","status" => "active"],["value" => 72,"unit" => "kilogram(kg)","status" => "active"]];
$arr2 = [["value" => 70,"unit" => "kilogram(kg)","status" => "active"],["value" => 72,"unit" => "kilogram(kg)","status" => "active"],["value" => 73,"unit" => "kilogram(kg)","status" => "active"]];
$arr1Values = array_column($arr1,'value');
$arr2Values = array_column($arr2,'value');
$diff1 = array_diff($arr1Values,$arr2Values);
if(count($diff1)){
echo "Extra in Arr 1\n";
foreach($diff1 as $key=>$val){
print_r($arr1[$key]);
}
}
$diff2 = array_diff($arr2Values,$arr1Values);
if(count($diff2)){
echo "Extra in Arr 2\n";
foreach($diff2 as $key=>$val){
print_r($arr2[$key]);
}
}
输出:
Extra in Arr 2
Array
(
[value] => 73
[unit] => kilogram(kg)
[status] => active
)
如果要将所有3个元素都保留为唯一,则可以使用以下代码
function func1($d){
return implode(",",$d);//You can put any symbol here
};
$arr1Values = array_map('func1',$arr1);
$arr2Values = array_map('func1',$arr2);
$arr2ValuesDiff = array_diff($arr2Values,$arr1Values);
foreach($arr2ValuesDiff as $k=>$v){
print_r(explode(',',$v));
}