2013-04-17 3 views
0

J'ai deux tableaux que j'essaie de trouver les différences/similitudes entre les deux.PHP Array Comparaison des clés et des valeurs

Voici les tableaux:

[781]=> 
    array(7) { 
    ["Pri_ID"]=> 
    string(3) "781" 
    ["Type"]=> 
    string(7) "Athlete" 
    ["EntryDate"]=> 
    string(10) "2013-04-15" 
    ["Status"]=> 
    string(6) "Active" 
    } 
    [782]=> 
    array(7) { 
    ["Pri_ID"]=> 
    string(3) "782" 
    ["EntryDate"]=> 
    string(10) "2013-04-15" 
    ["Status"]=> 
    string(7) "Removed" 
    } 

est ici le deuxième tableau:

 [780]=> 
     array(7) { 
     ["Pri_ID"]=> 
     string(3) "781" 
     ["EntryDate"]=> 
     string(10) "2013-04-15" 
     ["Status"]=> 
     string(7) "Removed" 
     } 
     [782]=> 
     array(7) { 
     ["Pri_ID"]=> 
     string(3) "782" 
     ["EntryDate"]=> 
     string(10) "2013-04-15" 
     ["Status"]=> 
     string(7) "Active" 
     } 

Notez que la clé dans le second tableau (780) n'existe pas dans le premier tableau. Notez également que le 'status' du tableau numéro deux (id 782) est maintenant 'actif' mais était à l'origine dans un statut de removed.

L'objectif global de ce projet est de comparer les deux tableaux, localiser les différences, puis placé ces différences dans et array ou une chaîne et envoyer les différences par courriel. Voici ce que je l'ai essayé jusqu'à présent:

$Deleted[] = array_diff_assoc($myarrayOld, $myarrayNew); 
$Added[] = array_diff_assoc($myarrayNew, $myarrayOld); 

Cela identifie les modifications entre les clés du tableau, mais pas les statuskeys du tableau.

Répondre

1

Utilisez une fonction récursive comme celui-ci

function array_diff_assoc_recursive($array1, $array2) { 
    $difference=array(); 
    foreach($array1 as $key => $value) { 
     if(is_array($value)) { 
      if(!isset($array2[$key]) || !is_array($array2[$key])) { 
       $difference[$key] = $value; 
      } else { 
       $new_diff = array_diff_assoc_recursive($value, $array2[$key]); 
       if(!empty($new_diff)) 
        $difference[$key] = $new_diff; 
      } 
     } else if(!array_key_exists($key,$array2) || $array2[$key] !== $value) { 
      $difference[$key] = $value; 
     } 
    } 
    return $difference; 
} 

Référence: PHP documentation

0

Voici un petit code pour comparer 2 tableaux.

function compareAssociativeArrays($first_array, $second_array) 
{ 
$result = array_diff_assoc($first_array, $second_array); 
if(!empty($result)) 
{ 
//Arrays are different 
//print_r($result); will return the difference as key => value pairs. 
return FALSE; 
} 
else 
{ 
//Arrays are same. 
//print_r($result); returns empty array. 
return TRUE; 
} 
} 

//Usage: 
$first = array(
'name' => 'Zoran', 
'smart' => 'not really' 
); 

$second = array(
'smart' => 'not really', 
'name' => 'Zoran' 
); 

if(compareAssociativeArrays($first, $second)) 
{ 
echo 'Arrays are same'; 
} 
else 
{ 
echo 'Arrays are different'; 
} 
Questions connexes