[PHP5] Leere Array-Einträge entfernen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [PHP5] Leere Array-Einträge entfernen

    Hallo,

    ich habe einen verschachtelten Array mit dem Name $structure. Manchmal hat ein Eintrag Kinder, manchmal nicht.

    Mein Array $structure sieht so aus:
    PHP-Code:
    Array
    (
      [
    52] => Array
        (
          [
    id] => 52
          
    [name] => Tier
          
    [level] => 0
          
    [children] => Array
            (
              [
    22] => Array
                (
                  [
    id] => 22
                  
    [name] => Katze
                  
    [level] => 1
                  
    [children] => Array
                    (
                    )
                )
              [
    26] => Array
                (
                  [
    id] => 26
                  
    [name] => Maus
                  
    [level] => 1
                  
    [children] => Array
                    (
                    )
                )
            )
        )

    Ich hatte gehofft mit dieser Funktion die leeren "children" entfernen zu können aber es klappt nicht.

    PHP-Code:
    function rekursiv$array )
    {

      foreach( 
    $array as $key => $value )
      {
        if( 
    is_array($value) )
        {
          if( !empty( 
    $value['children'] ) )
          {
            
    rekursiv$value['children'] );
          }
          else
          {
            unset(
    $value['children']);
            
    $temp[] = $value;
          }
        }
      }

      return 
    $temp;
    }

    $ausgabe rekursiv$structure );

    echo 
    '<pre>'print_r($ausgabe); echo '</pre><hr/>'
    Weiß jemand wo der Fehler ist?
    Zuletzt geändert von Screw Driver; 04.05.2008, 02:51.
    Gruß,
    Peter

  • #2
    es klappt nicht.
    Was passiert denn?
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Es kommt gar nichts raus und es wird gesagt, dass $temp nicht existiert.

      Code:
      Undefined variable: temp in D:\XAMPP\htdocs\mysystem\class\class.container.php on line 661
      Line 661 ist die Zeile in der return $temp; steht.
      Gruß,
      Peter

      Kommentar


      • #4
        Wenn PHP das sagt stimmt das auch!

        Übrigens:
        So wie du da mit unset was löschen willst, bringt das nicht viel, weil foreach mit einer Kopie des Arrays arbeitet.
        Wir werden alle sterben

        Kommentar


        • #5
          Aber was kann ich denn tun, wo steckt das Problem bei der Funktion? Ich komme einfach nicht weiter.
          Gruß,
          Peter

          Kommentar


          • #6
            Stell $value ein & voran! also &$value (in deinem foreach)
            Tempim.de - Dein kostenloser Bildhoster
            Tipps und Tricks für Webmaster

            Kommentar


            • #7
              Hammer!!!

              Klappt, 1000 Dank.
              Gruß,
              Peter

              Kommentar


              • #8
                Ich sehe nicht ein, warum ['children'] entfernt werden soll!
                Das denormalisiert die Struktur doch nur...
                Wir werden alle sterben

                Kommentar


                • #9
                  Ich will daraus einen aufklappbaren Baum generieren, der an verschiedenen Stellen offen sein kann.

                  Wenn ich "children" entferne, dann weiß ich später, dass dieser Knoten keine Kinder hat.

                  Die Knoten, die nicht offen sind, werden mit einem unset() anhand der ID entfernt.

                  So kann ich später bei der Generierung herausfinden, ob ein Knoten überhaupt Kinder hat (children ist vorhanden).

                  Ob der Knoten ein Plus oder Minus zum auf- und zuklappen bekommt bestimmt sich daraus, ob children leer ist oder gefüllt.

                  Eine andere Lösung fiel mir nicht ein.
                  Gruß,
                  Peter

                  Kommentar


                  • #10
                    Eine andere Lösung wäre count()
                    Tempim.de - Dein kostenloser Bildhoster
                    Tipps und Tricks für Webmaster

                    Kommentar


                    • #11
                      Ein einfaches empty würde zur Prüfung reichen.
                      Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                      Kommentar


                      • #12
                        Original geschrieben von tontechniker
                        Ein einfaches empty würde zur Prüfung reichen.
                        man kann auch einfach if(!$var) benutzen, nur wenn es ein array ist, finde ich count() am saubersten.

                        Kommentar


                        • #13
                          Soweit ich das sehe reicht genau das beides nicht.

                          Wenn ein Knoten zugeklappt ist, aber Kinder hat kann ich das nicht abfangen. "children" müsste dann vorhanden, aber leer sein.

                          Ist der Knoten auf, müsste "children" vorhanden und voll sein.

                          Knoten die gar keine Kinder haben, kann ich dann aber durch beide Bedingungen incht mehr prüfen.

                          Deshalb habe ich diese Regeln erstellt.

                          Knoten hat keine Kinder => "children" nicht gesetzt
                          Knoten zugeklappt, hat Kinder => "children" leer
                          Knoten offen, hat Kinder => "children" befüllt
                          Gruß,
                          Peter

                          Kommentar


                          • #14
                            Ich dachte, dass du den Baum erstellst?

                            Dann setzt du ja auch den "Knotenpunkt"..
                            ..und dann kannst du mit deiner Abfrage empty() (wie du es auch in deiner Funktion tust, nach und nach durchgehen, ob empty true oder false ergibt und wenn ja, dann machst du es zum Knotenpunkt und wenn nicht, lässt du deinen Knotenpunkt weg...

                            mfg

                            Kommentar


                            • #15
                              Dadurch weiß man aber nicht welcher Knoten auf ist.
                              Gruß,
                              Peter

                              Kommentar

                              Lädt...
                              X