如何比较并获得PHP中的2个multidim数组之间的差异

问题描述:

有人可以帮我解决这个问题。如何比较并获得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

例如,您可以使用“辅助阵列”($ 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