当键值相同时,我想找出两个多维数组之间的区别。我已经尝试过每一件事,也尝试过这么多的堆栈溢出解决方案,但是我做不到。
阵列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)我能够找到两个数组之间的区别,但我无法找到与键的区别。,我只需要在这里添加键。但我做不到。
我需要这样的结构,
array (size=2)
'phase-6[]' => string 'Admin Phase 2 Task 3' (length=20)
'phase-7[]' => string 'Admin Phase 3 Task 3' (length=20)发布于 2018-04-05 11:20:08
轻松解决方案与小改动
1.您需要在2/代码中向每个数组的所有值中添加一些唯一字符的键(我使用了foreach() )。
2.在得到差异后,在这个数组上迭代并使用一个独特的字符(我使用了/),然后使用第一部分作为键,第二部分作为值,然后将它们赋值给最终的结果数组。
如下所示:-
$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);发布于 2018-04-05 11:33:45
编写递归函数。
注释:您的子数组键必须是相同的,在第一个数组中,子数组键从1开始,但是在第二个数组中,它从0开始。如果你能让它保持不变,这个函数就能工作了。
参考文献:http://php.net/manual/en/function.array-diff-assoc.php#73972
function array_diff_assoc_recursive($array1, $array2)
{
foreach($array1 as $key => $value)
{
if(is_array($value))
{
if(!isset($array2[$key]))
{
$difference[$key] = $value;
}
elseif(!is_array($array2[$key]))
{
$difference[$key] = $value;
}
else
{
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
if($new_diff != FALSE)
{
$difference[$key] = $new_diff;
}
}
}
elseif(!isset($array2[$key]) || $array2[$key] != $value)
{
$difference[$key] = $value;
}
}
return !isset($difference) ? 0 : $difference;
}
var_dump( array_diff_assoc_recursive( $ajaxData, $dbData) );发布于 2018-04-05 11:37:12
您需要循环这两个数组并相互比较。
否则,如果一个子数组存在于一个数组中,而不存在另一个数组中,则不会注意到其中的差异。
//Loop once first array and compare against the other
Foreach($ajaxData as $key => $arr){
If(isset($dbData[$key])){
$ret[] = array_diff($arr, $dbData[$key]);
}else{
// If subarray only exists in one array add it to return array
$ret[] = $arr;
}
}
// Then the other way around
Foreach($dbData as $key => $arr){
If(isset($ajaxData[$key])){
If(!isset($ret[$key])) $ret[$key] = array_diff($arr, $ajaxData[$key]);
}else{
// If subarray only exists in one array add it to return array
$ret[] = $arr;
}
}
// echo found diff's.
Foreach($ret as $key => $val){
If(is_array($val)){
Foreach($val as $v){
Echo $key ." " . $v . "\n";
}
}
}https://stackoverflow.com/questions/49670902
复制相似问题