Gerd: Wert mit Key aus Array holen der leer ist

Hallo,

Ich habe heute morgen schon einmal hier gepostet und bin erhlich gesagt noch nicht viel weiter :(

Ich habe ein Array wo hinter einigen Schlüsseln kein Wert ist. Und ich muß genau diese Schlüssel löschen aber ich komme damit nicht zurecht. Mir sagt man ich sollte mit array_filter arbeiten aber damit komme ich absolut nicht zurecht.

Ich habe es nun mit array_values versucht siehe auch in meinem Script.

$array_list = array();
  foreach ($array_gesamt_liste as $list)
   {
   if (array_values($list) != "")
    {
    $array_list = array_values($list);
    }
   }
  print_r($array_list);

Wenn in der value von $list ungleich "" ist soll php all diese Werte in ein neues array schreiben. Aber das geht nicht!

Als Fehler kommt:
Argument to array_values() should be an array

Aber $array_gesamt_liste ist ein Array welches ich auch ausgeben kann!

Was ist denn da falsch?

Gruß Gerd

  1. Hallo!

    Wenn in der value von $list ungleich "" ist soll php all diese Werte in ein neues array schreiben. Aber das geht nicht!

    $array = array(
     "key1" => "value1",
     "key2" => "",
     "key3" => "value3",
     "key4" => "value4",
     "key5" => "",
     "key6" => "value6",
    );

    while(list($key, $value) = each($array))
     {
      if($value != "")
       {
        $array_neu[$key] = $value;
       }
     }

    var_dump($array_neu);

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. Hallo André

      ja das funktioniert!
      Da habe ich wohl falsch angesetzt!

      Zu Tom!
      Kein Wert ist "" oder auch empty(); Das habe ich auch ausprobiert aber weil da auch was falsch war habe ich das nächste ausprobiert...

      Mein Problem war ich wußte nicht wie ich über den value an den key komme. Da ich geblaubt habe anders herum führt das zum Problem da man normal Arrays über den key anspricht.

      Wobei "" könnte PHP glaube das es sich um ein leeren string handelt. Das wäre dann auch falsch!

      Gruß Gerd

      1. Zu each habe ich auch noch eine Frage also ich beziehe mich auf das Beispiel:

        <?php
        $foo = array ("Robert" => "Bob", "Seppo" => "Sepi");
        $bar = each ($foo);
        print_r($bar);
        ?>

        $bar enthält nun die folgenden Schlüssel/Wert Paare:

        Array
        (
            [1] => Bob
            [value] => Bob
            [0] => Robert
            [key] => Robert
        )

        Es werden 4 Elemente zurück gegeben aber wieso 4 ?

        Was soll ich denn mit 0 und 1 anstellen? Mir reicht doch value und key Ich verstehe den Sinn nicht wieso mir das doppelt wieder gegeben wird? Den key spreche ich wenn überhaupt nur das indezies oder des assoziative schlüssel an. Deswegen verstehe ich nicht wieso php mir alles doppelt gibt?

        1. Hallo!

          Zu each habe ich auch noch eine Frage also ich beziehe mich auf das Beispiel:

          <?php
          $foo = array ("Robert" => "Bob", "Seppo" => "Sepi");
          $bar = each ($foo);
          print_r($bar);
          ?>

          $bar enthält nun die folgenden Schlüssel/Wert Paare:

          Array
          (
              [1] => Bob
              [value] => Bob
              [0] => Robert
              [key] => Robert
          )

          Es werden 4 Elemente zurück gegeben aber wieso 4 ?

          Das tut each() einfach so. Du kannst Dich für "0" oder "value" bzw. "1" oder "key" entscheiden.

          http://de3.php.net/manual/de/function.each.php

          MfG, André Laugks

          --
          L-Andre @ gmx.de
          1. Hello,

            $foo = array ("Robert" => "Bob", "Seppo" => "Sepi");

            Array
            (
                [1] => Bob
                [value] => Bob
                [0] => Robert
                [key] => Robert
            )

            Das tut each() einfach so. Du kannst Dich für "0" oder "value" bzw. "1" oder "key" entscheiden.

            Nee umgekehrt: [0]   => [1]
                oder       [key] => [value]

            0 entspricht key
            1 entspricht value

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Hallo!

              Das tut each() einfach so. Du kannst Dich für "0" oder "value" bzw. "1" oder "key" entscheiden.

              Nee umgekehrt: [0]   => [1]
                  oder       [key] => [value]

              Stimmt!

              Klugscheißer! ;-)

              MfG, André Laugks

              --
              L-Andre @ gmx.de
              1. Hello,

                Das tut each() einfach so. Du kannst Dich für "0" oder "value" bzw. "1" oder "key" entscheiden.

                Nee umgekehrt: [0]   => [1]
                    oder       [key] => [value]

                Stimmt!

                Klugscheißer! ;-)

                nun lass mir doch auch mal eine kleine Freude *schnüff*

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Hello,

    Ich habe ein Array wo hinter einigen Schlüsseln kein Wert ist. Und ich muß genau diese Schlüssel löschen aber ich komme damit nicht zurecht. Mir sagt man ich sollte mit array_filter arbeiten aber damit komme ich absolut nicht zurecht.

    Definiere mal für Dich, was unter "kein Wert" zu verstehen ist.

    Das könnte ein "neutrales Element" sein, alse

    ""
     0
     1

    oder auch

    false
    NULL

    PHP unterscheidet diese Werte. PHP hat auch eine (un)sinnige Funktion empty(), die schau Dir mal an http://de3.php.net/manual/de/function.empty.php

    Wenn Du dann eine foreach($_array as $key => $value)-Schleife über das Array jagst und immer danach fragst, ob ein Wert hinter dem Key steckt, dann kannst Du die misliebigen (Nicht-)Werte finden und mit unset($_array[$key]) ins Nirwana schicken.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Wenn Du dann eine foreach($_array as $key => $value)-Schleife über das Array jagst und immer danach fragst, ob ein Wert hinter dem Key steckt, dann kannst Du die misliebigen (Nicht-)Werte finden und mit unset($_array[$key]) ins Nirwana schicken.

      Eine Frage habe ich jedoch noch.

      Wieso löscht php mit empty und unset mein leeren array key nicht???

      $array = array(
       "key1" => "value1",
       "key2" => "",
       "key3" => "value3",
       "key4" => "value4",
       "key5" => "",
       "key6" => "value6",
      );

      $anzahl = count($array);
        for( $a = 0; $a <= $anzahl; $a++ )
         {
           if(empty($array[$a]))
            {
          unset($array[$a]);
          }
         }

      echo "<br><pre>";
      var_dump($array);
      echo "</pre><br>";

      1. Hallo!

        Wieso löscht php mit empty und unset mein leeren array key nicht??

        Du durchläufst mit Deinem Konstrukt ein indiziertes Array. Das Array $array ist aber ein assoziatives Array.

        MfG, André Laugks

        --
        L-Andre @ gmx.de
      2. Hi,

        Wieso löscht php mit empty und unset mein leeren array key nicht???

        $array = array(
        "key1" => "value1",
        "key2" => "",
        "key3" => "value3",
        "key4" => "value4",
        "key5" => "",
        "key6" => "value6",
        );

        $anzahl = count($array);
          for( $a = 0; $a <= $anzahl; $a++ )
           {
             if(empty($array[$a]))
              {
            unset($array[$a]);
            }
           }

        PHP löscht die leeren Array-Elemente sehr wohl. Dein Problem hierbei ist, dass du die Elemente $array[0] bis $array[6] löschst. Diese haben allerdings auch vorher schon nicht existiert, da du die Elemente $array['key1'] bis $array['key6'] definiert hast. Und diese Elemente werden in deiner Schleife weder abgefragt, noch gelöscht. Benutzt du folgende Schleife, müsste es funktionieren:

        foreach ($array as $key => $val) {

        if (empty($val))
                unset($array[$key]);

        }

        Gruß,
        Andreas.