多维数组差异

Edg*_*gar 1 php

我有2个阵列:

$big_array = array (
                    array (
                            array (
                                      'correct' => FALSE,
                                      'answer' => 'false answer1'
                            ),
                            array (
                                      'correct' => FALSE,
                                      'answer' => 'false answer2'
                            ),
                            array (
                                      'correct' => FALSE,
                                      'answer' => 'false answer3'
                            ),                  
                            array (
                                      'correct' => TRUE,
                                      'answer' => 'correct answer'
                            )
                    )
);

$small_array = array (
                    array (
                            array (
                                      'correct' => FALSE,
                                      'answer' => 'false answer1'
                            )
                    )
);
Run Code Online (Sandbox Code Playgroud)

我想制作,array_diff($big_array, $small_array)但它不工作我想要它,目前它给我一个空数组作为结果,我希望结果是:

$outcome_array= array (
                    array (
                            array (
                                      'correct' => FALSE,
                                      'answer' => 'false answer2'
                            ),
                            array (
                                      'correct' => FALSE,
                                      'answer' => 'false answer3'
                            ),                  
                            array (
                                      'correct' => TRUE,
                                      'answer' => 'correct answer'
                            )
                    )
);
Run Code Online (Sandbox Code Playgroud)

有什么建议?

liy*_*kat 11

是的,你可以使用以下功能来获得完美的答案

function arrayRecursiveDiff($aArray1, $aArray2) {
  $aReturn = array();

  foreach ($aArray1 as $mKey => $mValue) {
    if (array_key_exists($mKey, $aArray2)) {
      if (is_array($mValue)) {
        $aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
        if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
      } else {
        if ($mValue != $aArray2[$mKey]) {
          $aReturn[$mKey] = $mValue;
        }
      }
    } else {
      $aReturn[$mKey] = $mValue;
    }
  }
  return $aReturn;
} 

  $arr1 =    arrayRecursiveDiff($big_array,$small_array);
Run Code Online (Sandbox Code Playgroud)

产量

如你所愿

Array

(
    [0] => Array
        (
            [1] => Array
                (
                    [correct] => 
                    [answer] => false answer2
                )

            [2] => Array
                (
                    [correct] => 
                    [answer] => false answer3
                )

            [3] => Array
                (
                    [correct] => 1
                    [answer] => correct answer
                )

        )

)
Run Code Online (Sandbox Code Playgroud)