kcs*_*ssm 8 php multidimensional-array
我有两个多维数组,我想要区别.例如.我在下面采用了二维两个数组
$array1 = Array (
[a1] => Array (
[a_name] => aaaaa
[a_value] => aaa
)
[b1] => Array (
[b_name] => bbbbb
[b_value] => bbb
)
[c1] => Array (
[c_name] => ccccc
[c_value] => ccc
)
)
$array2 = Array (
[b1] => Array (
[b_name]=> zzzzz
)
)
Run Code Online (Sandbox Code Playgroud)
现在我想要这两个数组的关键区别.我尝试过array_diff_key()但它不适用于多维.
array_diff_key($array1, $array2)
Run Code Online (Sandbox Code Playgroud)
我希望输出如下
//output
$array1 = Array (
[a1] => Array (
[a_name] => aaaaa
[a_value] => aaa
)
[b1] => Array (
[b_value] => bbb
)
[c1] => Array (
[c_name] => ccccc
[c_value] => ccc
)
)
Run Code Online (Sandbox Code Playgroud)
如果您认为我的问题是真的,请接受并回答.谢谢.
编辑
现在,如果第二个数组是
$array2 = Array( [b1] => zzzzz)
Run Code Online (Sandbox Code Playgroud)
结果应该是
$array1 = Array (
[a1] => Array (
[a_name] => aaaaa
[a_value] => aaa
)
[c1] => Array (
[c_name] => ccccc
[c_value] => ccc
)
)
Run Code Online (Sandbox Code Playgroud)
Zah*_*ass 10
请检查我是否理解正确,然后此代码段可以帮助您解决问题.我已经针对您指定的问题对其进行了测试.如果还有其他要运行它的测试用例,可以告诉我调整代码.
$a1 = array(
'a1' => array('a_name' => 'aaa', 'a_value' => 'aaaaa'),
'b1' => array('b_name' => 'bbb', 'b_value' => 'bbbbbb'),
'c1' => array('c_name' => 'ccc', 'c_value' => 'cccccc')
);
$a2 = array(
'b1' => array('b_name' => 'zzzzz'),
);
$result = check_diff_multi($a1, $a2);
print '<pre>';
print_r($result);
print '</pre>';
function check_diff_multi($array1, $array2){
$result = array();
foreach($array1 as $key => $val) {
if(isset($array2[$key])){
if(is_array($val) && $array2[$key]){
$result[$key] = check_diff_multi($val, $array2[$key]);
}
} else {
$result[$key] = $val;
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加调整代码.
小智 7
这个解决方案对我非常有帮助,希望无论阵列如何混乱,他们都能提供帮助。
function your_array_diff($arraya, $arrayb) {
foreach ($arraya as $keya => $valuea) {
if (in_array($valuea, $arrayb)) {
unset($arraya[$keya]);
}
}
return $arraya;
}
$a1 = Array
(
"0" => Array
(
"Empresa" => "TMC01",
"Paga" => "13/01/2015",
"ID" => "M2",
"Valor" => "200",
"Nombre" => "BONI"
),
"1" => Array
(
"Empresa" => "TMC01",
"Paga" => "13/01/2015",
"ID" => "M1",
"Valor" => "100",
"Nombre" => "SUELDO"
)
);
$b1 = Array
(
"0" => Array
(
"Empresa" => "TMC01",
"Paga" => "13/01/2015",
"ID" => "M1",
"Valor" => "100",
"Nombre" => "SUELDO"
),
"1" => Array
(
"Empresa" => "TMC01",
"Paga" => "13/01/2015",
"ID" => "M2",
"Valor" => "200",
"Nombre" => "BONI"
)
);
$resultado = your_array_diff($a1, $b1);
echo "<pre>";
echo print_r($resultado);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)
在很多情况下,原始答案无法正常工作,因此我写了一个更好的解决方案。问题之一是,如果删除数组2中的属性,其他函数将无法识别该属性。
function check_diff_multi($array1, $array2){
$result = array();
foreach($array1 as $key => $val) {
if(is_array($val) && isset($array2[$key])) {
$tmp = check_diff_multi($val, $array2[$key]);
if($tmp) {
$result[$key] = $tmp;
}
}
elseif(!isset($array2[$key])) {
$result[$key] = null;
}
elseif($val !== $array2[$key]) {
$result[$key] = $array2[$key];
}
if(isset($array2[$key])) {
unset($array2[$key]);
}
}
$result = array_merge($result, $array2);
return $result;
}
Run Code Online (Sandbox Code Playgroud)
我还添加了测试用例以检查结果:
如您所见,我的功能可以提供更好的结果。