这是我的2个阵列:
Array
(
[25] => Array
(
[items_to_give] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
[items_to_get] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
)
[26] => Array
(
[items_to_give] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
[items_to_get] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
)
[36] => Array
(
[items_to_give] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
[items_to_get] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
)
)
和
Array
(
[25] => Array
(
[items_to_give] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
[items_to_get] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
)
[26] => Array
(
[items_to_give] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
[items_to_get] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
)
[30] => Array
(
[items_to_give] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
[items_to_get] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
)
)
现在我想比较这些数组并返回两个数组中包含的所有数组。在这个例子中,这些是[25]和[26]。
所以返回的数组看起来应该是这样的(正如我所说[25]和[26]包含在两个数组中所以它返回):
Array
(
[25] => Array
(
[items_to_give] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
[items_to_get] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
)
[26] => Array
(
[items_to_give] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
[items_to_get] => Array
(
[0] => Array
(
[xx] => xx
[xx] => xx
)
)
)
)
我已尝试过的内容:
$result = array_map("unserialize", array_intersect($this->serialize_array_values($array1),$this->serialize_array_values($array2)));
function serialize_array_values($arr){
foreach($arr as $key=>$val){
sort($val);
$arr[$key]=serialize($val);
}
return $arr;
}
但是这会以错误的格式返回数组。 [items_to_give]和[items_to_get]正在转换为索引[0]和[1],这是不可取的。
我希望数组在返回时保持,这意味着我需要[items_to_give]和[items_to_get]而不是索引[0]和[1]
其他可能的解决方案是什么?感谢您的解决方案。
答案 0 :(得分:1)
尝试此功能:
function my_array_diff($arr1, $arr2)
{
$res = array();
foreach ($arr1 as $val1) {
$val1 = serialize($val1);
foreach ($arr2 as $key2 => $val2) {
if (serialize($val2) == $val1) {
$res[$key2] = $val2;
}
}
}
return $res;
}