当键相同时在多维数组中查找数组差异 [英] Find the Array Difference in Multi dimensional array when key is same

查看:50
本文介绍了当键相同时在多维数组中查找数组差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当键值相同时,我想找到两个多维数组之间的差异.我已经尝试了所有方法和许多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);

输出:- https://eval.in/984265

这篇关于当键相同时在多维数组中查找数组差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆