2013-02-09 2 views
0

누군가가 이걸 도와 줄 수 있을까.비교하고 PHP에서 2 multimim 배열의 차이를 얻으려면

나는이 개 배열 arr1이 나는 열을 강조/동일한 수준 나이 값과 반환이 항목에 대한 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"; 
?> 

을 arr2 그 일치하지 않았다.

예 : 그들은 같은 수준이 나이가 값 때문에 Ben-는> 3 -> 10 -> arr1의 M은 arr2에
A.1 잭으로> 3 -> 10 -> F 비교됩니다

arr1에 Chris-> 12> 3-> F 비교한다 A.2 Chris-> 12> 3-> M arr2 그들이 동일한 수준과 연령의 값을 갖기 때문에

I
행 어떤 열이 일치하지 않았는지를 알 수 있어야합니다. A.1의 경우 반환 이름은 & 성이어야합니다.
,363,210는 A.2에 대한 반환 성별해야

원하는 출력 : 내가 array_diff 여러 배열 함수 & 조작하지만, 내가 원하는 결과를 가지고 올 수 없습니다 :( PLS 도움말을 시도 http://s7.postimage.org/8r3tf24rf/img.png

. 감사!

+0

귀하의 예는 두 개의 레벨이 있습니다. 실제 데이터가 사실입니까? – Passerby

답변

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

감사합니다. 당신의 코드는 정확히 내가 필요로하는 것이 었습니다 !! –

+0

당신을 진심으로 환영합니다. – itsid

관련 문제