2012-05-25 3 views
0

Je veux comparer les 2 tableaux ci-dessous et trouver les différences. Les valeurs pour les clés "lead owner" et "company" sont différentes, mais quand je compare ces tableaux, il indique que seules les valeurs "company" sont différentes. Mais quand je crée 2 nouveaux tableaux avec une seule paire clé/valeur pour le "lead owner", cela fonctionne correctement. Est-ce que je fais une erreur?Quel est le problème avec ce code simple?

<?php 

$arr1 = Array 
    (
     "leadid" => "418176000000069007", 
     "smownerid" => "418176000000047003", 
     "lead owner" => "Amit Patil", 
     "company" => "SAM", 
     "first name" => "Test", 
     "last name" =>"Lead1", 
     "designation" => "call", 
     "email" => "", 
     "phone" => "958", 
     "fax" => "", 
     "mobile" => "", 
     "website" => "www.infosys.con", 
     "lead source" => "Cold Call", 
     "lead status" => "Contact in Future", 
     "industry" => "None", 
     "no of employees" => "45000", 
     "annual revenue" => "0", 
     "rating" => "Active", 
     "smcreatorid" => "418176000000047003", 
     "created by" => "Amit Patil", 
     "modifiedby" => "418176000000047003", 
     "modified by" => "Amit Patil", 
     "created time" => "2012-04-05 19:58:00", 
     "modified time" => "2012-05-02 08:51:08", 
     "street" => "", 
     "city" => "", 
     "state" => "", 
     "zip code" => "", 
     "country" => "", 
     "description" => "", 
     "skype id" => "", 
     "email opt out" => "false", 
     "salutation" => "Mr.", 
     "secondary email" => "" 
     ); 

$arr2 = Array 
    (
     "leadid" => "418176000000069007", 
     "smownerid" => "418176000000047003", 
     "lead owner" => "Amit aaa", 
     "company" => "SAM A", 
     "first name" => "Test", 
     "last name" => "Lead1", 
     "designation" => "call", 
     "email" => "", 
     "phone" => "958", 
     "fax" => "", 
     "mobile" => "", 
     "website" => "www.infosys.con", 
     "lead_source" => "Cold Call", 
     "lead_status" => "Contact in Future", 
     "industry" => "None", 
     "no_of_employees" => "45000", 
     "annual_revenue" => "0", 
     "rating" => "Active", 
     "smcreatorid" => "418176000000047003", 
     "created_by" => "Amit Patil", 
     "modifiedby" => "418176000000047003", 
     "modified_by" => "Amit Patil", 
     "created_time" => "2012-04-05 19:58:00", 
     "modified_time" => "2012-05-02 08:51:08", 
     "street" => "", 
     "city" => "", 
     "state" => "", 
     "zip_code" => "0", 
     "country" => "", 
     "description" => "", 
     "skype_id" => "", 
     "email_opt_out" => "false", 
     "salutation" => "Mr.", 
     "secondary_email" => "" 
     ); 

$arr3 = array("lead owner" => "Amit Patil"); 
$arr4 = array("lead owner" => "Amit aaa"); 

print_r(array_diff($arr1,$arr2)); 
echo "<br>"; 
print_r(array_diff($arr3,$arr4)); 
?> 

sortie est comme ci-dessous

Array ([company] => SAM) 
Array ([lead owner] => Amit Patil) 
+1

ce qui est la sortie? – AlphaMale

+0

Ajout de la sortie. –

+0

ajoutez également quelle est votre sortie désirée. signifie ce que vous voulez que la sortie soit? – AlphaMale

Répondre

1

Si vous voulez diff entre les tableaux associatifs afin que les paires valeur/clé soient importantes, pas seulement les valeurs, utilisez array_diff_assoc, et non array_diff.

+0

Son retour de mauvais résultats, je veux dire son retour quelques colonnes qui ne sont pas différents ex: "no_of_employees", "annual_revenue", "created_by" , "created_time". Où les valeurs de cette clé sont exactement les mêmes. pourquoi cela se passe-t-il ?? –

+0

Il semble que certaines de vos clés utilisent des espaces et d'autres utilisent des traits de soulignement. –

+0

essayez de copier le code ci-dessus ... il n'y a pas de caractères de soulignement. Il renvoie également un mauvais résultat. –

1

Vous comprendre- à tort.

La page de documentation de array_diff dit

Retourne un tableau contenant toutes les entrées de array1 qui ne sont pas présentes dans aucun autre tableau.

Mais le Amit Patil est présent dans le second tableau, il est donc de retour qu'une seule valeur qui est SAM et il est seulement une valeur qui ne figure pas dans le deuxième tableau.

+0

Shakti, remercie pour cette explication, maintenant je comprends la différence entre addta_diff() et array_diff_assoc() –

1

array_diff() renvoie des valeurs complémentaires. Donc, vous pouvez le faire comme ceci:

array_diff(array_merge($arr1, $arr2), array_intersect($arr1, $arr2)); 

De cette façon, cela va fonctionner.

1

Cela se produit parce que la fonction "array_diff" renvoie les valeurs qui se produisent pour n'importe quelle clé dans le premier tableau et ne se produit pas pour aucune des clés dans le deuxième tableau. Le lead_owner "Amit Patil" n'est pas égal au second tableau lead_owner, mais est égal aux clés created_by et modified_by du second.

Vous devez utiliser "array_diff_assoc" à cette fin.

1

essayer et de voir, cela devrait fonctionner

print_r(array_diff_assoc($arr1,$arr2)); 
echo "<br>"; 
print_r(array_diff_assoc($arr3,$arr4));