如何区分两个多维数组?

3

我正在尝试获取两个多维数组的差异,并返回在另一个数组中没有匹配项的数组。

这里有:

数组1:

Array ( 
    [0] => Array ( [Dashboard] => /LMS/Dashboard ) 
    [1] => Array ( [Notifications] => /LMS/Notifications ) 
    [2] => Array ( [Clients] => /LMS/Clients ) 
    [3] => Array ( [Penalties] => /LMS/Penalties ) 
    [4] => Array ( [Payments] => /LMS/Payments ) 
    [5] => Array ( [Profit] => /LMS/Profit ) 
    [6] => Array ( [Income] => /LMS/Income ) 
    [7] => Array ( [Outcome] => /LMS/Outcome ) 
    [8] => Array ( [Accounts] => /LMS/Accounts ) 
    [9] => Array ( [Collection] => ) 
    [10] => Array ( [Missed Payments] => ) 
    [11] => Array ( [Applied Penalties] => ) 
    [12] => Array ( [Group Names] => /LMS/Group-Names ) 
)

数组 2:

Array ( 
    [0] => Array ( [Notifications] => /LMS/Notifications ) 
    [1] => Array ( [Clients] => /LMS/Clients ) 
    [2] => Array ( [Penalties] => /LMS/Penalties ) 
    [3] => Array ( [Payments] => /LMS/Payments ) 
    [4] => Array ( [Collection] => ) 
    [5] => Array ( [Missed Payments] => ) 
    [6] => Array ( [Applied Penalties] => ) 
)

我想获取在数组1中没有匹配的数组。
3个回答

1
您可以使用以下代码:
public static function check_diff_multi($array1, $array2){
        //Get all the Keys from the 2nd Array.
        $keys = array();
        foreach( $array2 as $key => $a ) {
            $keys = array_merge( $keys, array_keys( $a ));
        }

        //This will be the final array
        $result = array();

         //Loop through First Array
        foreach( $array1 as $key => $a ) {
            $firstKey = key($a);  //Get the Key
            if( in_array( $firstKey, $keys ) ) {  //If this key exists in the 2nd array, then continue
                continue;
            }
            $result[] = $array1[$key]; //This key is not present in 2nd array, so add to output.
        }
        return $result;
    }

2
我会改进答案,不管怎样它能够工作。谢谢。 - user8486381

0
请尝试这段代码:
public static function diffArray($array1,$array2){
    $flag=0;
        foreach($array1 as $key1 => $value1){
            foreach ($array2 as $key2 => $value2) {
                if($key1==$key2)
                    $flag++;
            }
            if($flag==0)
                $array3[$key1]=$value1;
            $flag=0;
        }
    return $array3;
}

你的输出将是:

Array
(
    [Dashboard] => /LMS/Dashboard
    [Profit] => /LMS/Profit
    [Income] => /LMS/Income
    [Outcome] => /LMS/Outcome
    [Accounts] => /LMS/Accounts
    [Group Names] => /LMS/Group-Names
)

1
你能在 public static function 中应用它吗? - user8486381
1
它不会输出 - user8486381
1
请改进答案,我会给予赞。 - user8718268
McC0d3,你能否建议我如何改进我的代码? - Vidya

0
Please try to use like this 

$aray1 = Array (
[0] => Array ( [Notifications] => /LMS/Notifications )
[1] => Array ( [Clients] => /LMS/Clients )
[2] => Array ( [Penalties] => /LMS/Penalties )
[3] => Array ( [Payments] => /LMS/Payments )
[4] => Array ( [Collection] => )
[5] => Array ( [Missed Payments] => )
[6] => Array ( [Applied Penalties] => )
);

$aray2 = Array (
[0] => Array ( [Dashboard] => /LMS/Dashboard )
[1] => Array ( [Notifications] => /LMS/Notifications )
[2] => Array ( [Clients] => /LMS/Clients )
[3] => Array ( [Penalties] => /LMS/Penalties )
[4] => Array ( [Payments] => /LMS/Payments )
[5] => Array ( [Profit] => /LMS/Profit )
[6] => Array ( [Income] => /LMS/Income )
[7] => Array ( [Outcome] => /LMS/Outcome )
[8] => Array ( [Accounts] => /LMS/Accounts )
[9] => Array ( [Collection] => )
[10] => Array ( [Missed Payments] => )
[11] => Array ( [Applied Penalties] => )
[12] => Array ( [Group Names] => /LMS/Group-Names )
);



$printResult = get_diff_array($aray1, $aray2);

function get_diff_array($aray1, $aray2) {
    $arrayResult = [];
    foreach ($aray1 as $key => $val) {
        if (isset($aray2[$key])) {
            if (is_array($val) && $aray2[$key]) {
                $arrayResult[$key] = get_diff_array($val, $aray2[$key]);
            }
        } else {
            $arrayResult[$key] = $val;
        }
    }
    return $arrayResult;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接