2016-01-25 3 views
2

Я хочу, чтобы получить разность двух многомерных arrys, например,Как получить разницу между двумя многомерными массивами в php?

Первый массив:

Array 
(
    [qtr_selected] => Array 
     (
      [partner_q_m_p__2031] => Array 
       (
        [0] => q1 
        [1] => q2 
       ) 

      [partner_q_m_p__2032] => Array 
       (
        [0] => q1 
       ) 

     ) 

) 

Второй массив:

Array 
(
    [qtr_completed] => Array 
     (
      [partner_q_m_p__2031] => Array 
       (
        [0] => q1 
       ) 

     ) 

) 

как я получить разницу Array1 & массив2 как ниже:

Array 
(
    [qtr_final] => Array 
     (
      [partner_q_m_p__2031] => Array 
       (
        [0] => q2 
       ) 

      [partner_q_m_p__2032] => Array 
       (
        [0] => q1 
       ) 

     ) 

) 

Пробовал функцию array_diff(), но не получал array1 как разницу, кроме array2, я хочу array1 после вычитания массива из него.

+0

Как вы получаете эти массивы? @kapil – AnkiiG

+0

Я сохранил данные флажков в многомерных массивах теперь, я хочу сравнить эти массивы, чтобы получить их разницу. – kapil

ответ

2

Просто сделайте пользовательскую функцию как

function check_diff($arr1, $arr2){ 
    $check = (is_array($arr1) && count($arr1)>0) ? true : false; 
    $result = ($check) ? ((is_array($arr2) && count($arr2) > 0) ? $arr2 : array()) : array(); 
    if($check){ 
     foreach($arr1 as $key => $value){ 
      if(isset($result[$key])){ 
       $result[$key] = array_diff($value,$result[$key]); 
      }else{ 
       $result[$key] = $value; 
      } 
     } 
    } 

    return $result; 
} 
$result['qtr_final'] = check_diff($a1['qtr_selected'],$a2['qtr_completed']); 
print_r($result); 
+0

, если первый массив пуст, а затем я получаю значение в конечном массиве, то, что я хочу, - если первый массив отсутствует, то он не должен находиться в конечном массиве. Массив ( [qtr_final] => Массив ( [partner_q_m_p__2031] => Массив ( [0] => q1 ) ) ) – kapil

+0

я хочу, чтобы не законченными "четв", т.е. если первый массив отсутствует, то он не должен находиться в конечном массиве, второй массив имеет завершенную qtr. – kapil

+1

Я обновил свой ответ, пожалуйста, проверьте @kapil –

0

Вы можете получить разницу array1 и массив2 с помощью этого:

<? 
// array 1 
$array1['qtr_selected']['partner_q_m_p__2031'] = array('q1','q2'); 
$array1['qtr_selected']['partner_q_m_p__2032'] = array('q1'); 

// array 2 
$array2['qtr_completed']['partner_q_m_p__2031'] = array('q1'); 

$removalArr = array(); 
foreach ($array2 as $key1 => $value1) { 
    foreach ($value1 as $key2 => $value2) { 
     $removalArr = $value2; // get last value of removal array 
    } 
} 

$finalArr = array(); 
foreach ($array1 as $key1 => $value1) { 
    foreach ($value1 as $key2 => $value2) { 
     // check difference if available, 
     // if difference available use array_diff else use normal. 
     $finalArr['qtr_final'][$key2] = (array_diff($value2,$removalArr) ? array_diff($value2,$removalArr) : $value2); 
    } 
} 

echo "<pre>"; 
print_r($finalArr); 

?> 

Результат:

Array 
(
    [qtr_final] => Array 
    (
     [partner_q_m_p__2031] => Array 
     (
      [1] => q2 
     ) 

     [partner_q_m_p__2032] => Array 
     (
      [0] => q1 
     )  
    )  
) 
1

Попробуйте, как показано ниже:

$a1 = Array 
(
     'qtr_selected' => Array 
     (
       'partner_q_m_p__2031' => Array 
       (
         '0' => 'q1', 
         '1' => 'q2', 
       ), 

       'partner_q_m_p__2032' => Array 
       (
         '0' => 'q1' 
       ) 

     ) 

); 

$a2 = Array 
(
     'qtr_completed' => Array 
     (
       'partner_q_m_p__2031' => Array 
       (
         '0' => 'q1' 
       ) 

     ) 

); 

$result['qtr_final'] = check_diff_multi($a1['qtr_selected'], 

$a2['qtr_completed']); 
print '<pre>'; 
print_r($result); 
print '</pre>'; 


function check_diff_multi($array1, $array2){ 
    $result = array(); 
    foreach($array1 as $key => $val) { 
     if(isset($array2[$key])){ 
      if(is_array($val) && $array2[$key]){ 
       $result[$key] = check_diff_multi($val, $array2[$key]); 
      } 
     } else { 
      $result[$key] = $val; 
     } 
    } 

    return $result; 
} 
+0

AnkiiG, получив массив результатов, как: массив ( [qtr_final] => Массив ( [partner_q_m_p__2031] => Массив ( [qtr_final] => Массив ( [1] => д2 ) ) [partner_q_m_p__2032] => Массив ( [0] => q1 ) ) ) кроме: [partner_q_m_p__2031] => Массив ( [1] => q2 ) – kapil

+0

@kapil Пожалуйста, попробуйте сейчас. Я обновил. Спасибо за указание вопроса – AnkiiG

+0

Спасибо @ AnkiiG ​​ваше решение также отлично работает сейчас. – kapil

Смежные вопросы