0

誰かがこれを手伝ってくれませんか。

私は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 (およびその逆) の違いを比較し、一致しなかった列を返す/強調表示する必要があります。

例: arr1 の Ben->3->10->M は、arr2 の
A.1 Jack->3->10->F と比較されます。これは、レベルと年齢の値が同じ

Chris->12->4-であるためです。 >arr1 の F は、arr2 の
A.2 Chris->12->4->M と比較されます。これは、レベルと年齢の値が同じであるためです。


A.1に一致しなかった列を知ることができるはずです.1の戻り値は名前と性別
である必要があります.2.戻り値は性別でなければなりません

望ましい出力: http://s7.postimage.org/8r3tf24rf/img.png

array_diff といくつかの配列関数と操作を試しましたが、目的の結果が得られません:( pls help.Thanks!

4

1 に答える 1

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

于 2013-02-09T04:20:18.223 に答える