[英]How to get the difference between two multidimensional arrays of associative arrays in PHP?
[英]How to find the difference between two multidimensional arrays with different sizes and levels in PHP
我在 php 中有两个不同大小和级别的多维 arrays。 我需要在第二个数组中找到第一个数组中没有的元素。
数组 A:
$bmw_a = array(
"3 series" => array(),
"5 series" => array(
"520D" => array(
"N47_163" => array(),
),
"530i" => array(),
),
"7 series" => array(),
);
数组 B:
$bmw_b = array(
"1 series" => array(),
"3 series" => array(),
"5 series" => array(
"520D" => array(
"N47_163" => array(),
"M47_177" => array()
),
"530i" => array(
"M54_228" => array(),
"N52_255" => array()
),
),
"7 series" => array(),
);
我需要 output 看起来像这样:
$output = array(
"1 series" => array(),
"5 series" => array(
"520D" => array(
"M47_177" => array()
),
"530i" => array(
"M54_228" => array(),
"N52_255" => array()
)
)
);
我尝试了array_diff和array_diff_assoc ,但没有一个有效。
array_diff_assoc()仅适用于一个级别,因此对于多维 arrays 您需要递归。
这里是:
<?php
$bmw_a = array(
"3 series" => array(),
"5 series" => array(
"520D" => array(
"N47_163" => array(),
),
"530i" => array(),
),
"7 series" => array(),
);
$bmw_b = array(
"1 series" => array(),
"3 series" => array(),
"5 series" => array(
"520D" => array(
"N47_163" => array(),
"M47_177" => array()
),
"530i" => array(
"M54_228" => array(),
"N52_255" => array()
),
),
"7 series" => array(),
);
$result = array_diff_assoc_recursive($bmw_b, $bmw_a);
echo '<pre>';
var_dump($result);
function array_diff_assoc_recursive($array1, $array2) {
$diff = array();
foreach ($array1 as $key => $value) {
if (is_array($value)) {
if (!isset($array2[$key]) || !is_array($array2[$key])) {
$diff[$key] = $value;
} else {
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
if (!empty($new_diff)) {
$diff[$key] = $new_diff;
}
}
} elseif (!isset($array2[$key]) || $array2[$key] != $value) {
$diff[$key] = $value;
}
}
return $diff;
}
Output:
array(2) {
["1 series"]=>
array(0) {
}
["5 series"]=>
array(2) {
["520D"]=>
array(1) {
["M47_177"]=>
array(0) {
}
}
["530i"]=>
array(2) {
["M54_228"]=>
array(0) {
}
["N52_255"]=>
array(0) {
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.