2013-02-05 1 views
1

J'ai deux tableaux que je compare. La comparaison fonctionne parfaitement comme suit:Afficher uniquement les valeurs dans mon deuxième tableau php

$tmp = array_diff_key($arr1, $arr2); 
    $echo $tmp; 

Cependant, je ne veux que pour afficher les valeurs qui existent dans le tableau 2 qui n'existent pas dans le tableau 1.

Edit: Ok merci donc pour l'aide de tout le monde . Cependant, je n'arrive toujours pas à le faire fonctionner.

J'utilise maintenant

$tmp = array_diff($arr2, $arr1); 
    var_dump($tmp); 

qui imprime les éléments suivants:

array(1) { [0]=> array(3) { [0]=> string(4) "cars" [1]=> string(4) "vans" [2]=> string(6) "people" } } 

Alors, je vais vous expliquer un peu.

La rangée 1 a des voitures, des fourgonnettes (ceci est tiré de la base de données).

La rangée 2 a des voitures, des personnes (ceci est entré d'un formulaire).

Je suis en train de seulement présentent des valeurs qui ne sont pas dans la base de données, donc je pensais $ tmp serait echo seulement les gens que les voitures se trouve dans la base de données et vans est en $ arr1

J'espère que des thats clair comme même me confondre écrit;)

Si je var_dump à la fois ensemble j'obtenir individuellement

array(3) { [0]=> NULL [1]=> string(4) "cars" [2]=> string(4) "vans" } array(1) { [0]=> array(2) { [0]=> string(6) "people" [1]=> string(5) "tanks" } } 
+0

en quoi cela diffère de votre code? –

+0

Veuillez ne pas utiliser les balises qui ne s'appliquent pas à votre question –

+0

'$ echo' devrait être' echo' et cela n'imprimera quand même pas le contenu des tableaux. – leftclickben

Répondre

2
$tmp = array_diff_key($arr2, $arr1); 
$echo $tmp; 

echo $tmp sera juste sortie 'Array' Ith encre, vous devez donc probablement faire une boucle dessus (peut-être avec foreach) pour afficher chaque valeur individuelle, ou utiliser var_dump.

array_diff_key fonctionne également avec les clés, array_diff avec des valeurs (vous mentionnez "valeurs" dans votre question).

+0

Ha ha ha votre droite – atpatil11

+0

Ok après avoir effacé mon cache il semblerait que cette réponse fonctionne très bien. merci beaucoup :) –

1

vous pouvez faire comme suit:

foreach($tmp as $key=>$value) { 
    if(isset($arr2[$key])) { 
     echo $arr2[$key]; 
    } 
} 
2

Utilisez array_intersect. array_intersect donne des valeurs qui sont dans les deux.

$tmp2 = array_intersect($arr1, $arr2); 
var_dump($tmp2); 

Modifier: J'ai mal lu la question. array_diff servira le but. array_diff renvoie les valeurs de argument1 qui ne sont pas présentes dans le reste des arguments.

$tmp2 = array_diff($arr2, $arr1); 
var_dump($tmp2); 

Edit: Dans votre cas, votre $arr2 a un tableau à l'intérieur qui a des valeurs. Donc, vous aurez besoin de array_diff($arr2[0], $arr1);

Voici un fonctionnement fiddle.

+0

J'ai changé pour array_diff mais ça ne marche toujours pas. Ma question principale a été mise à jour avec votre code et la sortie d'un var_dump –

+0

Pouvez-vous s'il vous plaît également ajouter le 'var_dump' des tableaux individuels à la question? – Achrome

+0

Fait ce array1 et array2 l'un à côté de l'autre. Cette fois dans le tableau 2 je suis entré dans les chars, les gens –

1

D'après ma compréhension de array_diff_key, la fonction renvoie un tableau contenant toutes les entrées de argument1 dont les clés ne sont présentes dans aucun des autres tableaux. Il suffit donc de mettre $arr2 dans le premier argument.

Ainsi, votre code doit être:

$tmp = array_diff_key($arr2, $arr1); 
$echo $tmp; 

Source

+0

merci @MikeB J'ai essayé array_diff_key de cette façon et il me présente juste avec array (0) {} événement bien que je sais qu'il devrait dire les gens que les voitures sont dans le tableau 1 –

1

échange la direction:

$tmp = array_diff_key($arr2, $arr1); 
    $echo $tmp; 
1

Si vous êtes préoccupé par des valeurs et pas des valeurs clés, alors vous devriez simplement utiliser array_diff() . Vous devrez également inverser l'ordre des tableaux dans les paramètres. Enfin en écho à un tableau ne va pas vous montrer ce que vous voulez, utilisez var_dump(). Donc, tout mettre ensemble:

$tmp = array_diff($arr2, $arr1); 
var_dump($tmp); 
+0

merci pour votre aide mais cela imprime simplement array (0) {} J'ai maintenant mis à jour ma question –

Questions connexes