当键相同时在多维数组中查找数组差异
当键值相同时,我想找到两个多维数组之间的差异.我已经尝试了所有方法和许多Stackoverflow解决方案,但我无法做到这一点.
I want to find the difference between two Multi dimensional array when key value is same. I have tried every thing and so many Stackoverflow solution but I'm not able to do it.
数组1(DbData):-
$ajaxData = array("phase-5[]" =>
array(
'1' => "Admin Phase 1 Task 1",
'2' => "Admin Phase 1 Task 2"
),"phase-6[]" =>
array(
'1' => "Admin Phase 2 Task 1",
'2' => "Admin Phase 2 Task 2",
'3' => "Admin Phase 2 Task 3"
),"phase-7[]" =>
array(
'1' => "Admin Phase 3 Task 1",
'2' => "Admin Phase 3 Task 2",
'3' => "Admin Phase 3 Task 3"
)
);
数组2(AjaxData):-
$dbData = array("phase-5[]" =>
array(
'0' => "Admin Phase 1 Task 1",
'1' => "Admin Phase 1 Task 2"
),"phase-6[]" =>
array(
'0' => "Admin Phase 2 Task 1",
'1' => "Admin Phase 2 Task 2"
),"phase-7[]" =>
array(
'0' => "Admin Phase 3 Task 1",
'1' => "Admin Phase 3 Task 2"
)
);
PHP代码:-
$ajaxDataList = array();
foreach ($ajaxData as $key => $value) {
print_r($key);
foreach ($value as $data) {
$ajaxDataList[] = $data;
}
}
$dbDataList = array();
foreach ($dbData as $key => $value) {
print_r($key);
foreach ($value as $data) {
$dbDataList[] = $data;
}
}
var_dump(array_diff($ajaxDataList, $dbDataList));
代码的O/P:-
array (size=2)
4 => string 'Admin Phase 2 Task 3' (length=20)
7 => string 'Admin Phase 3 Task 3' (length=20)
我能够找到两个数组之间的差异,但无法找到与键的差异.我只需要在此处添加密钥.但是我做不到.
I'm able to find the difference between two array but I'm not able to find diffrence with key. I just need to add key here. But I'm not able to do it.
我需要这样的结构
array (size=2)
'phase-6[]' => string 'Admin Phase 2 Task 3' (length=20)
'phase-7[]' => string 'Admin Phase 3 Task 3' (length=20)
易于更改的解决方案
Easy solution with small changes
1.您需要在2个 foreach()
代码
1.You need to add keys with some unique character (I used /
) to all values of each array inside your 2 foreach()
code
2.得到差异后,迭代该数组并使用唯一字符爆炸(我使用/
),然后将第一部分用作键,第二部分用作值,并将它们分配给最终结果数组
2.After getting difference iterate over this array and explode with a unique character (I used /
) and then use first part as key and second part as value and assign them to your final result array
执行以下操作:-
$ajaxDataList = array();
foreach ($ajaxData as $key => $value) {
foreach ($value as $data) {
$ajaxDataList[] = $key.'/'.$data; //add key with each value
}
}
$dbDataList = array();
foreach ($dbData as $key => $value) {
foreach ($value as $data) {
$dbDataList[] = $key.'/'.$data; // add key with each value
}
}
$semi_final_array = array_diff($ajaxDataList, $dbDataList);
$final_array = [];
foreach($semi_final_array as $arr){ // iterate over difference array
$exploded = explode('/',$arr); //explode data
$final_array[$exploded[0]] = $exploded[1]; // use exploded array as key value pair
}
print_r($final_array);