2016-01-25 89 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 
       ) 

     ) 

) 

如何獲得作爲陣列1 &數組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從它減去array2後。

+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] => Q2 ) ) [partner_q_m_p__2032] =>數組 ( [0] => Q1 ) ) ) 除外: [partner_q_m_p__2031] =>數組 ( [1] => Q2 ) – kapil

+0

@kapil請現在嘗試。我已更新。感謝您指出問題 – AnkiiG

+0

謝謝@ AnkiiG您的解決方案現在也能正常工作。 – kapil