2009-08-08 14 views
2

zuerst möchte ich sagen, dass ich neu in PHP bin.prüfen Existenz eines Objekts in Array

Ich habe eine Implementierung, die prüft, ob ein Objekt im Array ist oder nicht, wenn nicht ein weiteres Array hinzugefügt wird. Aber es gibt immer false zurück und fügt das Array hinzu.

Wie kann ich es lösen?

Hier ist ein Teil des Codes:

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

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

Antwort

8

Da Sie Instanzen im Array hinzufügen, stellen Sie sicher, dass das Array in_array() Strict-Modus Vergleich verwendet:

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

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

Auch müssen Sie verstehen, dass 2 verschiedene Instanzen einer Klasse, selbst wenn sie dieselben Daten enthalten, immer noch 2 verschiedene Instanzen sind. Sie müssen Ihre eigene Schleife erstellen und Ihre Instanzen manuell vergleichen, wenn Sie wissen, ob 2 Instanzen gleich sind.

Sie können den strikten Modus weglassen, der die Mitglieder der Klasse vergleicht, aber sobald Sie ein anderes Mitglied haben, wird es nicht gleich sein.

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

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

Wie Sie sagten, habe ich meine eigene Schleife erstellt, aber wieder bekomme ich dasselbe Ergebnis. Hier ist der Code: function exists ($ b, $ array) {foreach ($ array als $ a) wenn ($ a-> x == $ b-> x) true zurückgibt; falsch zurückgeben; } – Kaan

+0

Dann weiß ich wirklich nicht was ich sagen soll. Scheint mir, dass Sie Pseudo-Code anstelle von Ihrem Code einfügen, aber Ihr Problem ist in Ihrem Code. Ein Semikolon zwischen der if-Anweisung und den geschweiften Klammern vielleicht? –

0

Ich denke, es liegt daran, dass Sie nach einem Verweis auf das neue Objekt in Ihrem Array suchen, nicht die Werte dieses Objekts. Versuchen Sie,:

print_r($temp_array); 

Und sehen, was man bekommt ... das sollten Sie eine Vorstellung davon, wie es zu beheben.

Verwandte Themen