Matt: in_array() und meine arrays

Hallo,

ich bin grad etwas am verzweifeln.

Ich habe einen Array der die "Über-Infos" enthält:

$array_warning:
Array
(
    [0] => Array
        (
            [info] => SimpleXMLElement Object
                (
                    [0] => Schwarzer Text überdruckt nicht und ist kleiner als 12pt
                )
         )

[1] => Array
        (
            [info] => SimpleXMLElement Object
                (
                    [0] => Schwarzer Text überdruckt nicht und ist kleiner als 12pt
                )
        )

usw.

PHP sieht so aus:

$array_warning_pool = array();  
  
foreach ($array_warning as $key => $listit) {  
  
if( in_array($listit['info'], $array_warning_pool) ) {  
echo 'ja, doppelt blabla';  
}  
  
else {  
$array_warning_pool[] = $listit['info'];  
}  

Nunja, das in_array funktioniert leider nicht... ich denke es liegt an dem Aufbau des Arrays array_warning_pool...

Der Array array_warning_pool sieht so aus wenn er durch das obige Script gefüllt wird:

Array
(
    [0] => SimpleXMLElement Object
        (
            [0] => Schwarzer Text überdruckt nicht und ist kleiner als 12pt
        )

[1] => SimpleXMLElement Object
        (
            [0] => Schwarzer Text überdruckt nicht und ist kleiner als 12pt
        )

usw.

$listit['info'] beinhaltet zum Beispiel das hier (-> Schwarzer Text... blabla) :

Array (listit)
(
    [info] => SimpleXMLElement Object
        (
            [0] => Schwarzer Text überdruckt nicht und ist kleiner als 12pt
        )

Ich checke also allgemein ob in dem Über-Array $array_warning doppelte einträge vorkommen und wenn ja, soll nichts passieren, wenn nein eben ein Eintrag in ein neuen Array der dann nichts doppeltes beinhaltet.

Meine jetzige Funktion bringt nichtmal eine Fehlermeldung.

Jemand eine Idee wie das in_array richtig heissen müsste, oder ob ich das hier überhaupt verwenden kann?

Grüße,
Matt

  1. echo $begrüßung;

    Nunja, das in_array funktioniert leider nicht... ich denke es liegt an dem Aufbau des Arrays array_warning_pool...
    Array
    (
        [0] => SimpleXMLElement Object
            (
                [0] => Schwarzer Text überdruckt nicht und ist kleiner als 12pt
            )

    [1] => SimpleXMLElement Object
            (
                [0] => Schwarzer Text überdruckt nicht und ist kleiner als 12pt
            )

    in_array() durchsucht nur das Array als solches. Wenn Elemente darin komplexen Typs (Array, Objekt) sind, dann steigt es nicht in diese hinein.

    Außerdem hast du es mit Objekten zu tun, für die es eigene Vergleichsregeln gibt: Comparing objects. Und obendrein spielt auch noch SimpleXML mit. Das verhält sich aufgrund der von ihm verwendeten Magie sowieso etwas unberechenbarer als üblich. Prüf doch mal zu Fuß, ob die Objekte gleich sind. Brauchst du an der Stelle überhaupt noch die SimpleXMLElement-Objekte? Wenn nicht, solltest du den Inhalt daraus befreien und allein mit ihm weiterarbeiten.

    Meine jetzige Funktion bringt nichtmal eine Fehlermeldung.

    Warum auch, ist ja aus PHP-Sicht alles richtig.

    echo "$verabschiedung $name";

    1. Comparing objects. Und obendrein spielt auch noch SimpleXML mit. Das verhält sich aufgrund der von ihm verwendeten Magie sowieso etwas unberechenbarer als üblich. Prüf doch mal zu Fuß, ob die Objekte gleich sind. Brauchst du an der Stelle überhaupt noch die SimpleXMLElement-Objekte? Wenn nicht, solltest du den Inhalt daraus befreien und allein mit ihm weiterarbeiten.

      Hallo,

      danke für deinen Beitrag.
      Klingt alles recht logisch!

      Wie kann ich denn die SimpleXML Objekte sozusagen befreien bzw. das Array so abändern?

      Grüße,
      Matt

      1. echo $begrüßung;

        Wie kann ich denn die SimpleXML Objekte sozusagen befreien bzw. das Array so abändern?

        Der Dokumentation von SimpleXML entnehme ich, dass das mit einem Typecast des Objekts auf String gehen soll. Siehe Example 2210 auf der Seite http://de.php.net/manual/en/ref.simplexml.php

        echo "$verabschiedung $name";