Gerd: leeren Schlüsselwert löschen Array

Hallo

wie lösche ich ein leeren Schlüsselwert?

Array ( [0] => 11 [1] => )

In Schlüssel 1 steht kein Wert wie kann ich den löschen? Das heißt wenn ich ein Array habe wo mehrer Schlüssel leer sind wie lösche ich die?

Gruß Gerd

  1. Hi,

    ich hab das zuletzt über eine CallBack-Funktion in Zusammenarbeit mit array_filter gemacht:
    http://de3.php.net/manual/de/function.array-filter.php.
    Du solltest dabei allerdings beachten, dass du nicht direkt empty o.ä. als Funktion angeben kannst, siehe Kommentare.

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Anhand des Links verstehe ich immer noch nicht wie ich es machen soll...

      Das Problem könnte ich in meinem Fall auch anders lösen ich schreibe die Zahlen aus einem String in Array der String ist durch ein ; getrennt.

      Ich habe gedacht es gibt es Funktion die das letzte Zeichen löscht, das heißt es muß ein ; sein.

      Nur ltrim und trim löscht nur Leerzeichen von daher geht das auch nicht :(

  2. Hallo

    wie lösche ich ein leeren Schlüsselwert?

    AFAIK geht das direkt nicht? Ich hab auch gerade noch mal nachgeschaut und komischerweise auch keine entsprechende Funktion gefunden? Du kannst mal die Callback-Funktionen benutzen aber AFAIK kannst Du damit nicht direkt die Struktur des Arrays verändern?

    Wahrscheinlich bleibt Dir nix anders übrig als das bestehende Array mit einer Schleife zu durchlaufen und jeden Wert der leer ist mit unset() zu löschen, so in etwa:

    <?php
    $array = array
             (
               1 => "Wert_1",
               2 => "",
               3 => "Wert_3",
               4 => "",
               5 => "Wert_5",
               6 => "Wert_6",
               7 => "Wert_7",
               8 => "",
               9 => "Wert_9",
             );

    echo( "<pre>Originales Array:\n" );
    print_r( $array );
    echo( "</pre><hr>" );

    $count = count($array);
    for( $i = 1; $i <= $count; $i++ )
    {
      if( $array[$i] == "" ) unset( $array[$i] );
    }

    echo( "<pre>Kastriertes Array:\n" );
    print_r( $array );
    echo( "</pre>" );
    ?>

    Grüsse AndreD

    1. Hi!

      AFAIK geht das direkt nicht? Ich hab auch gerade noch mal nachgeschaut und komischerweise auch keine entsprechende Funktion gefunden? Du kannst mal die Callback-Funktionen benutzen aber AFAIK kannst Du damit nicht direkt die Struktur des Arrays verändern?

      Doch, kannst du, der Witz an der Funktion ist, dass du so ein Konstrukt machst:
      $arr2 = array_filter($arr, meineFunktion);

      Immer wenn meineFunktion true ergibt kommt der Wert in das Ergebnisfeld, er fällt raus, wenn die Funktion false liefert.
      Man sollte nur vermeiden wieder auf dem Originalarray zu schreiben, das hat PHP gar nicht gerne.
      Das Ergebnis ist dann tatsächlich das Array, das nur die befüllten Werte enthält.
      Wenn du unbedingt DAS Array verändern musst, dann machst du halt hinterher $arr=$arr2;

      MfG
      Rouven

      --

      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      1. Hello,

        Doch, kannst du, der Witz an der Funktion ist, dass du so ein Konstrukt machst:

        Ok, muss ich mal selber bei Gelegenheit testen. Danke für den Hinweis.

        Grüsse AndreD