如何比较并获得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和几个阵列功能&操作,但我不能想出期望的结果:( 请帮助。谢谢!
例如,您可以使用“辅助阵列”($ 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>";
?>
非常感谢它。你的代码是我真正需要的! – 2013-02-22 08:30:33
不客气。 – itsid 2013-02-22 08:33:06
你举的例子只有两个级别。你的真实数据是真的吗? – Passerby 2013-02-09 03:07:23