如何在php中获得两个多维数组的差异?
我想得到两个多维arry的差,例如 第一个阵列:如何在php中获得两个多维数组的差异?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我想得到两个多维arry的差,例如 第一个阵列: Array ( [qtr_selected] => Array ( [partner_q_m_p__2031] => Array ( [0] => q1 [1] => q2 ) [partner_q_m_p_
Array
(
[qtr_selected] => Array
(
[partner_q_m_p__2031] => Array
(
[0] => q1
[1] => q2
)
[partner_q_m_p__2032] => Array
(
[0] => q1
)
)
)
第二个阵列:
Array
(
[qtr_completed] => Array
(
[partner_q_m_p__2031] => Array
(
[0] => q1
)
)
)
如何获得阵列1和阵列2的差异,如下所示:
Array
(
[qtr_final] => Array
(
[partner_q_m_p__2031] => Array
(
[0] => q2
)
[partner_q_m_p__2032] => Array
(
[0] => q1
)
)
)
尝试了array_diff()函数,但未将array1作为除array2之外的差分,我希望从中减去array2后得到array1。您可以使用以下方法获得array1和array2的差分:
<?
// array 1
$array1['qtr_selected']['partner_q_m_p__2031'] = array('q1','q2');
$array1['qtr_selected']['partner_q_m_p__2032'] = array('q1');
// array 2
$array2['qtr_completed']['partner_q_m_p__2031'] = array('q1');
$removalArr = array();
foreach ($array2 as $key1 => $value1) {
foreach ($value1 as $key2 => $value2) {
$removalArr = $value2; // get last value of removal array
}
}
$finalArr = array();
foreach ($array1 as $key1 => $value1) {
foreach ($value1 as $key2 => $value2) {
// check difference if available,
// if difference available use array_diff else use normal.
$finalArr['qtr_final'][$key2] = (array_diff($value2,$removalArr) ? array_diff($value2,$removalArr) : $value2);
}
}
echo "<pre>";
print_r($finalArr);
?>
请尝试以下操作:
function check_diff($arr1, $arr2){
$check = (is_array($arr1) && count($arr1)>0) ? true : false;
$result = ($check) ? ((is_array($arr2) && count($arr2) > 0) ? $arr2 : array()) : array();
if($check){
foreach($arr1 as $key => $value){
if(isset($result[$key])){
$result[$key] = array_diff($value,$result[$key]);
}else{
$result[$key] = $value;
}
}
}
return $result;
}
$result['qtr_final'] = check_diff($a1['qtr_selected'],$a2['qtr_completed']);
print_r($result);
$a1=数组
(
“选定的qtr_”=>数组
(
'partner_q_m_p_2031'=>数组
(
“0”=>“q1”,
“1”=>“q2”,
),
'partner_q_m_p_2032'=>数组
(
“0”=>“q1”
)
)
);
$a2=阵列
(
“qtr_已完成”=>数组
(
'partner_q_m_p_2031'=>数组
(
“0”=>“q1”
)
)
);
$result['qtr\u final']=检查差异多($a1['qtr\u selected'],
$a2['qtr_已完成]);
打印“”;
打印(结果);
打印“”;
函数检查\u diff\u multi($array1,$array2){
$result=array();
foreach($array1作为$key=>$val){
如果(isset($array2[$key])){
if(is_数组($val)&&$array2[$key]){
$result[$key]=检查差异(val,$array2[$key]);
}
}否则{
$result[$key]=$val;
}
}
返回$result;
}
只需创建如下自定义函数
如何获得这些阵列@kapili已经将复选框数据存储在多维数组中,现在我想比较这些数组以获得它们的差异。AnkiiG,得到的结果数组为:数组([qtr_final]=>array([partner_q_m_p_2031]=>array([qtr_final]=>array([1]=>q2))[partner_q_m_p_2032]=>Array([0]=>q1)),除了:[partner_q_m_p_2031]=>Array([1]=>q2)@kapil请立即尝试。我已更新。感谢您指出issueThanks@AnkiiG您的解决方案现在也可以正常工作。如果第一个数组为空,那么我仍然在最终数组中获取值,我想要的是,如果第一个数组不存在,那么它不应该在最终数组中。数组([qtr\u final]=>array([partner_q_m_p_2031]=>Array([0]=>q1)))我希望获得未完成的“qtr”,即,如果第一个数组不存在,那么它不应该在最终数组中,第二个数组保留已完成的qtr。
$a1 = Array
(
'qtr_selected' => Array
(
'partner_q_m_p__2031' => Array
(
'0' => 'q1',
'1' => 'q2',
),
'partner_q_m_p__2032' => Array
(
'0' => 'q1'
)
)
);
$a2 = Array
(
'qtr_completed' => Array
(
'partner_q_m_p__2031' => Array
(
'0' => 'q1'
)
)
);
$result['qtr_final'] = check_diff_multi($a1['qtr_selected'],
$a2['qtr_completed']);
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;
}
function check_diff($arr1, $arr2){
$check = (is_array($arr1) && count($arr1)>0) ? true : false;
$result = ($check) ? ((is_array($arr2) && count($arr2) > 0) ? $arr2 : array()) : array();
if($check){
foreach($arr1 as $key => $value){
if(isset($result[$key])){
$result[$key] = array_diff($value,$result[$key]);
}else{
$result[$key] = $value;
}
}
}
return $result;
}
$result['qtr_final'] = check_diff($a1['qtr_selected'],$a2['qtr_completed']);
print_r($result);