2009-08-08 8 views
2

au début je veux dire que je suis nouveau en PHP.vérifier l'existence d'un objet dans le tableau

J'ai une implémentation qui vérifie qu'un objet est dans le tableau ou pas, sinon ajoute un autre tableau. Mais il retourne toujours false et ajoute dans le tableau theorder.

Comment puis-je le résoudre?

Voici une partie du code:

$temp = new tempClass($x, $y); 

    if (!in_array($temp, $temp_array)) { 
      $temp2_array[] = $temp; 
    } 

Répondre

8

Puisque vous ajoutez des cas dans le tableau, assurez-vous que le tableau in_array() utilise la comparaison de mode strict:

$temp = new tempClass($x, $y); 

if (!in_array($temp, $temp_array, true)) { 
    $temp2_array[] = $temp; 
} 

De plus, vous devez comprendre que 2 instances différentes d'une classe, même si elles contiennent les mêmes données, sont toujours 2 instances différentes. Vous devrez créer votre propre boucle et comparer vos instances manuellement si vous voulez savoir si 2 instances sont identiques.

Vous pouvez omettre le mode strict qui permettra de comparer les membres de la classe, mais dès que vous avez un membre différent, il sera non égal.

$temp = new tempClass($x, $y); 

if (!in_array($temp, $temp_array)) { 
    $temp2_array[] = $temp; 
} 
+0

Comme vous l'avez dit, j'ai créé ma propre boucle mais encore une fois j'obtiens le même résultat. Voici le code: function existe ($ b, $ array) {foreach ($ array comme $ a) if ($ a-> x == $ b-> x) renvoie true; return false; } – Kaan

+0

Ensuite, je ne sais vraiment pas quoi dire. Il me semble que vous collez du pseudo-code au lieu de votre code, mais votre problème est dans votre code. Un point-virgule entre l'instruction if et les accolades peut-être? –

0

Je pense que c'est parce que vous vérifiez une référence au nouvel objet dans votre tableau, pas les valeurs de cet objet. Essayez de faire:

print_r($temp_array); 

Et voyez ce que vous obtenez ... cela devrait vous donner une idée de la façon de le réparer.

Questions connexes