Anso: Elemente aus einm Array löschen ?

Hallo,

wie lösche ich denn die leeren Elemente aus einem Array, die nach dem unset Befehl noch überbleiben.

Habe schon danach hier gesucht, bei google gesucht und auch Lösungen gefunden, aber die haben bei mir nicht funktioniert.

Wie geht es am einfachsten ? Ich bräuche im Prinzip eine Funktion, die alle "" Elemente und deren Indexe löscht.

Danke im Voraus!

MfG, Ansgar

  1. Bastel dir eine einfach Funktion:

    function loescheleere($array)
    {
     foreach($array as $name=>$elem)
     {
      if(empty($elem))
       unset($array[$name]);
     }
    }

    Ich nehme hier an, das Array ist eindimensional.

    Ich habe die Funktion oben nicht getestet, aber es sollte schon funktionieren, es sieht jedenfalls sehr danach aus.

    MfG
    Robert

    1. Bastel dir eine einfach Funktion:

      function loescheleere($array)
      {
      foreach($array as $name=>$elem)
      {
        if(empty($elem))
         unset($array[$name]);
      }
      }

      Ich nehme hier an, das Array ist eindimensional.

      Ich habe die Funktion oben nicht getestet, aber es sollte schon funktionieren, es sieht jedenfalls sehr danach aus.

      MfG
      Robert

      Auch dir einen herzlichen Dank für deinen Vorschlag, aber meineserachtens kann das so nicht funktionieren, da unset($array($name)); ja nichts anders macht als die Position wieder leer zu setzen und das nützt mir ja eben nichts.

      MfG, Ansgar

      1. Hi

        Auch dir einen herzlichen Dank für deinen Vorschlag, aber meineserachtens kann das so nicht funktionieren, da unset($array($name)); ja nichts anders macht als die Position wieder leer zu setzen und das nützt mir ja eben nichts.

        Von wegen.
        Probiers doch einfach mal aus.

        MfG
        Robert

        1. Hi,

          Auch dir einen herzlichen Dank für deinen Vorschlag, aber meineserachtens kann das so nicht funktionieren, da unset($array($name)); ja nichts anders macht als die Position wieder leer zu setzen und das nützt mir ja eben nichts.

          Von wegen.

          Das ist wohl nur teilweise richtig, je nachdem um welche Art von Array es sich handelt. Auf der von dir verlinkten Seite steht:
          <Zitat>
          As far as array elements go, unset() is really only useful for removing named keys. For numeric keys, you can use array_splice to "unset" the element.
          </Zitat>

          mfG,
          steckl

  2. Moin Ansgar,

    Wenn Du die Position des zu löschenden Elementes kennst, in einer foreach Schleife z.B. ja kein Problem, dann kannst du anstatt unset();
    auch array_splice(); einsetzen. Damit kann man nicht nur den Wert, sondern das gesamte Element im Array löschen.
    Bei einem nicht 0-basiertem Array würde unset(); das Element eh komplett löschen, IIRC.

    array_splice($Arrayname, $Position, $AnzahlElemente, $optional_NeuEinfügen);
    Soll nur ein Element gelöscht werden, für $AnzahlElemente eben 1 angeben.

    Wenn Du das unset() nicht ersetzen kannst (wofür mir jetzt eigentlich kein Grund einfällt), könntest Du das gesamte Array mit foreach durchgehen, und abfragen ob für den jeweiligen Schlüssel der Wert "" ist. In dem Fall mit array_splice(); entfernen.

    mit freundlichen Grüßen
    Ulrich

    --
    Teiltransparente Bereiche
    selfcode: sh:| br:> ie:% mo:) va:) de:] zu:) fl:( ss:| ls:[
    um-fritz.de
    1. Moin Ansgar,

      Wenn Du die Position des zu löschenden Elementes kennst, in einer foreach Schleife z.B. ja kein Problem, dann kannst du anstatt unset();
      auch array_splice(); einsetzen. Damit kann man nicht nur den Wert, sondern das gesamte Element im Array löschen.
      Bei einem nicht 0-basiertem Array würde unset(); das Element eh komplett löschen, IIRC.

      array_splice($Arrayname, $Position, $AnzahlElemente, $optional_NeuEinfügen);
      Soll nur ein Element gelöscht werden, für $AnzahlElemente eben 1 angeben.

      Wenn Du das unset() nicht ersetzen kannst (wofür mir jetzt eigentlich kein Grund einfällt), könntest Du das gesamte Array mit foreach durchgehen, und abfragen ob für den jeweiligen Schlüssel der Wert "" ist. In dem Fall mit array_splice(); entfernen.

      mit freundlichen Grüßen
      Ulrich

      Hi, danke schonmal für die Antwort.

      Ich habe den unset befehl jetzt durch deinen Array_Splice($arrayname, $position, 1) ersetzt.

      Das funktioniert so aber nicht.

      Was ist denn da wohl noch falsch ?

      MfG, Ansgar

      1. Hallo,

        Zunächst ist es nicht nötig den gesamten vorherigen Post zu zitieren.
        Dann eine Gegenfrage: hast Du die Dokumentation zu dem Befehl gelesen:
        http://php.net/array_splice?

        Ferner ist es relativ unmöglich Dir zu helfen, wenn Du nicht mitteilst, was denn genau nicht funktioniert. Gibt es eine Fehlermeldung? Wenn ja welche. Wenn Du die Funktion isolierst und mit einem Testarray durchlaufen läßt, was ist dann in dem Array vor und nach dem Durchlauf enthalten?
        War die Schlussfolgerung überhaupt richtig, dass um einen 0-basierten Array geht?

        Hast Du im Quelltext wie im Post Array_Splice(); geschrieben? Dann versuche es mal mit der Kleinschreibung. Solange Du die wesentlichen Informationen nicht mitteilst, kann man nur Rätselraten.

        mit freundlichen Grüßen
        Ulrich

        --
        Teiltransparente Bereiche
        selfcode: sh:| br:> ie:% mo:) va:) de:] zu:) fl:( ss:| ls:[
        um-fritz.de
        1. Hallo Ulrich,

          danke nochmal für die Antwort.

          Also.  Ich habe ein Array mit dem Namen ids2 in dem meinetwegen ids stehen.

          (13, 51, 56, 67, 76)

          Jetzt lasse ich

          unset($ids2[1]);

          unset($ids2[2]);

          unset($ids2[3]);

          unset($ids2[4]);

          durchlaufen.

          Dann sieht das Array so aus (13, "", "", "", "")

          Ich will aber das es dann so aussieht

          (13)

          Das gleiche muss dann natürlich auch funktionieren, wenn ich etwas aus der Mitte lösche. Das heißt wenn ich

          unset($ids2[2]);

          unset($ids2[3]);

          laufen lasse und das Array so aussieht: (13, 51, "", "", 76)

          soll es so aussehen:

          (13, 51, 76)

          Gibt es da keinen Befehl für ?

          MfG, Ansgar

          1. Hi

            Gibt es da keinen Befehl für ?

            Cookies kann man löschen, indem man sie auf false stellt. Versuche mal, die zu löschenden Arrayelemente auf false zu setzen. Auch das habe ich nicht getestet.

            MfG
            Robert

            1. Hi,

              Cookies kann man löschen, indem man sie auf false stellt.

              Diese Methode wär mir neu.
              Soweit ich weiß macht man das, indem man ihr Ablaufdatum in die Vergangenheit setzt.

              Versuche mal, die zu löschenden Arrayelemente auf false zu setzen. Auch das habe ich nicht getestet.

              Dann überschreibst du die Elemente mit false aber löscht sie nicht.

              mfG,
              steckl

          2. Moin,

            »» Also.  Ich habe ein Array mit dem Namen ids2 in dem meinetwegen ids stehen.
            »»
            »» (13, 51, 56, 67, 76)
            »»
            »» Jetzt lasse ich
            »»
            »» unset($ids2[1]);
            ...
            »»
            »» Dann sieht das Array so aus (13, "", "", "", "")
            »»
            »» Ich will aber das es dann so aussieht
            »»
            »» (13)
            »» ...

            Doch, der Befehl steht da oben.
            Was passiert denn z. B. bei:

            array_splice($ids2, 1, 1);

            Wenn das Array voher so aussah:
            $ids2[0] = "a";
            $ids2[1] = "b";
            $ids2[2] = "c";

            sollte es danach nicht so aussehen:

            $ids2[0] = "a";
            $ids2[1] = "c";

            und was passiert hier:

            echo "<pre>, var_dump($ids2), "</pre>";
            foreach ($ids2 as $k => $w) {
              if ($ids2[$k] = "") {
                array_splice($ids2, $k, 1);
              }
            }
            echo "<pre>, var_dump($ids2), "</pre>";

            mit freundlichen Grüßen
            Ulrich

            --
            Teiltransparente Bereiche
            selfcode: sh:| br:> ie:% mo:) va:) de:] zu:) fl:( ss:| ls:[
            um-fritz.de
  3. echo $begrüßung;

    wie lösche ich denn die leeren Elemente aus einem Array, die nach dem unset Befehl noch überbleiben.

    Du unterliegst einem Denkfehler und wahrscheinlich verwendest du auch noch eine ungeeignete Schleife.

    Bitte setze zum Entwickeln das error_reporting auf E_ALL und schalte display_errors ein, falls es aus ist. Damit bekommst du Zugriffe auf nicht vorhandene Variablen (und Array-Elemente) angezeigt. Schau dir bitte auch den Inhalt des Arrays mit der Funktion print_r oder var_dump() an, und zwar vor dem ersten unset(), danach und auch nach dem letzten unset(). (Zur besseren Übersichtlichkeit in einem HTML-Kontext empfiehlt sich, vorher ein <pre> auszugeben.)

    echo "$verabschiedung $name";