2013-02-09 111 views
0

有人可以幫我解決這個問題。如何比較並獲得PHP中的2個multidim數組之間的差異

我有2個陣列ARR1和ARR2

<?php 
$arr1[0]['name'] = "Ben"; 
$arr1[0]['level'] = "3"; 
$arr1[0]['age'] = "10"; 
$arr1[0]['gender'] = "M"; 
$arr1[1]['name'] = "Chris"; 
$arr1[1]['level'] = "12"; 
$arr1[1]['age'] = "4"; 
$arr1[1]['gender'] = "F"; 


$arr2[0]['name'] = "Jack"; 
$arr2[0]['grade_level'] = "3"; 
$arr2[0]['age'] = "10"; 
$arr2[0]['gender'] = "F"; 
$arr2[1]['name'] = "Lily"; 
$arr2[1]['level'] = "2"; 
$arr2[1]['age'] = "7"; 
$arr2[1]['gender'] = "F"; 
$arr2[2]['name'] = "Chris"; 
$arr2[2]['level'] = "12"; 
$arr2[2]['age'] = "4"; 
$arr2[2]['gender'] = "M"; 
?> 

我需要比較上具有相同的水平和年齡值和返回條目ARR1和ARR2(反之亦然)之間的差值/突出的列,不匹配。

例如: 本 - > 3-> 10-> M在ARR1會相比
A.1 Jack-> 3-> 10->的F ARR2因爲它們具有相同的水平與年齡值

Chris-> 12-> 4->的F ARR1會相比
A.2 Chris-> 12-> 4-> M在ARR2,因爲它們具有相同的水平和年齡值

我應該能夠知道哪些列不匹配
for A.1退貨應該是名稱&性別
爲A.2回報應該是性別

所需的輸出: http://s7.postimage.org/8r3tf24rf/img.png

我曾嘗試和array_diff和幾個陣列功能&操作,但我不能想出期望的結果:( 請幫助。謝謝!

+0

你舉的例子只有兩個級別。你的真實數據是真的嗎? – Passerby 2013-02-09 03:07:23

回答

0

例如,您可以使用「輔助陣列」($ HL高亮顯示),其會是這樣的:

<?php 
$arr1[0]['name'] = "Ben"; 
$arr1[0]['level'] = "3"; 
$arr1[0]['age'] = "10"; 
$arr1[0]['gender'] = "M"; 
$arr1[1]['name'] = "Chris"; 
$arr1[1]['level'] = "12"; 
$arr1[1]['age'] = "4"; 
$arr1[1]['gender'] = "F"; 


$arr2[0]['name'] = "Jack"; 
$arr2[0]['level'] = "3"; 
$arr2[0]['age'] = "10"; 
$arr2[0]['gender'] = "F"; 
$arr2[1]['name'] = "Lily"; 
$arr2[1]['level'] = "2"; 
$arr2[1]['age'] = "7"; 
$arr2[1]['gender'] = "F"; 
$arr2[2]['name'] = "Chris"; 
$arr2[2]['level'] = "12"; 
$arr2[2]['age'] = "4"; 
$arr2[2]['gender'] = "M"; 

$hl1 = array(); 
$hl2 = array(); 

foreach($arr1 as $x => $tester) 
{ 
    foreach($arr2 as $y => $testing) 
    { 
     if(($tester['level'] == $testing['level']) AND ($tester['age'] == $testing['age'])) 
     { 
      foreach($tester as $key => $value) 
      { 
       if($testing[$key] != $value) 
       { 
        $hl1[$x]['pos'] = true; 
        $hl1[$x]['key'][] = $key; 
        $hl2[$y]['pos'] = true; 
        $hl2[$y]['key'][] = $key; 
       } 
      } 
     } 
    } 
} 
$printheader = true; 
echo "<table border='1'>"; 
foreach($arr1 as $pos => $printer) 
{ 
    echo "<tr>"; 
    if($printheader) 
    { 
     $header = array_keys($printer); 
     foreach($header as $key) 
     { 
      echo "<td>". $key ."</td>"; 
     } 
     echo "</tr><tr>"; 
     $printheader = false; 
    } 
    foreach($printer as $key => $value) 
    { 
     if(isset($hl1[$pos]) AND in_array($key, $hl1[$pos]['key'])) 
     { 
      echo "<td style='background-color: ff0000;'>". $value ."</td>"; 
     } 
     else 
      echo "<td>". $value ."</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 
$printheader = true; 
echo "<table border='1'>"; 
foreach($arr2 as $pos => $printer) 
{ 
    echo "<tr>"; 
    if($printheader) 
    { 
     $header = array_keys($printer); 
     foreach($header as $key) 
     { 
      echo "<td>". $key ."</td>"; 
     } 
     echo "</tr><tr>"; 
     $printheader = false; 
    } 
    foreach($printer as $key => $value) 
    { 
     if(isset($hl2[$pos]) AND in_array($key, $hl2[$pos]['key'])) 
     { 
      echo "<td style='background-color: ff0000;'>". $value ."</td>"; 
     } 
     else 
      echo "<td>". $value ."</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 
?> 

看起來是這樣的:http://anyimg.com/view/8pj5q71/table_out.png

+0

非常感謝它。你的代碼是我真正需要的! – 2013-02-22 08:30:33

+0

不客氣。 – itsid 2013-02-22 08:33:06