gondor: Array modifizieren

Hallo!

Wie kann ich aus einem Array:

$array = $_GET['array'];
var_dump($array);

alle Einträge löschen, die den Wert 0 zugewiesen bekommen haben?

Ergebnis var_dump:

array(1) { ["test_01"]=>  array(5) { ["abc"]=>  string(1) "1" ["dfr"]=>  string(1) "1" ["gbh"]=>  string(1) "0" ["bbh"]=>  string(1) "0"  ["feh"]=>  string(1) "0" }

Nach der Bearbeitung:

array(1) { ["test_01"]=>  array(2) { ["abc"]=>  string(1) "1" ["dfr"]=>  string(1) "1"}

Danke für Hilfe,

gondor(..)

  1. hi,

    Wie kann ich aus einem Array:

    $array = $_GET['array'];
    var_dump($array);

    alle Einträge löschen, die den Wert 0 zugewiesen bekommen haben?

    Durchlaufe es in einer Schleife, und wenn das aktuelle Element den Wert 0 hat, entferne es mit unset().

    Achtung: Foreach arbeitet normalerweise mit einer Kopie des Arrays.
    array_walk() o.ä. bieten sich da vielleicht eher an.

    Aber villeicht kannst du auf das Entfernen ja auch verzichten - wenn du bei der Verarbeitung Nullwerte einfach ignorierst.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Durchlaufe es in einer Schleife, und wenn das aktuelle Element den Wert 0 hat, entferne es mit unset().

      Kannst Du mir hier noch mal ein Tipp geben?

      Schaffe das einfach nicht, das Array 'richtig' zu durchlaufen :-(

      foreach($array as $k => $v) {
        //Überprüfung, ob 0
      }

      Aber villeicht kannst du auf das Entfernen ja auch verzichten - wenn du bei der Verarbeitung Nullwerte einfach ignorierst.

      Muss den ersten Weg wählen...

    2. echo $begrüßung;

      Achtung: Foreach arbeitet normalerweise mit einer Kopie des Arrays.

      Das ist nicht ganz richtig. Genauer gesagt, ist bei

      foreach ($array as $key => $value)

      der Inhalt von $value eine Kopie von $array[$key]. Es ist durchaus möglich, mit

      foreach ($array as $key => $value)
          if (bedingung)
            unset($array[$key]);

      Bestandteile aus $array zu entfernen oder mit $array[$key] = ein_Wert; den Inhalt von Feldern zu ändern. Letzteres kann man unter PHP5 eleganter mit einer Referenz lösen:

      foreach ($array as &$value)
          $value = neuer_Wert;

      array_walk() o.ä. bieten sich da vielleicht eher an.

      array_filter() ohne Angabe einer Callback-Funktion entfernt alle Werte, die false entsprechen.

      echo "$verabschiedung $name";

      1. array_filter() ohne Angabe einer Callback-Funktion entfernt alle Werte, die false entsprechen.

        Kann doch nicht sein:

        $array = $_GET['array'];
        var_dump($array);

        array(1) { ["test"]=>  array(3) { ["abc"]=>  string(5) "false" ["def"]=>  string(5) "false" ["ghi"]=>  string(5) "false" } }

        var_dump(array_filter($array));

        array(1) { ["test"]=>  array(3) { ["abc"]=>  string(5) "false" ["def"]=>  string(5) "false" ["ghi"]=>  string(5) "false" } }

        passiert nichts... PHP: PHP: 5.1.4

        gondor(..)

        1. echo $begrüßung;

          array_filter() ohne Angabe einer Callback-Funktion entfernt alle Werte, die false entsprechen.
          Kann doch nicht sein:
          array(1) { ["test"]=>  array(3) { ["abc"]=>  string(5) "false" ["def"]=>  string(5) "false" ["ghi"]=>  string(5) "false" } }

          Der String "false" entspricht ja auch nicht dem booleschen false.

          echo "$verabschiedung $name";

          1. okay, habe ich gerade auch festgestellt... *uff*

            jetzt habe ich das:

            $array_r = $_REQUEST['array'];

            print_r($array_r);

            Array ( [test] => Array ( [abc] => [def] => 1 [ghi] => ) )

            $array_s = array_filter($array_r['test']);

            print_r($array_s);

            Array ( [def] => 1 )

            jetzt muss ich (nur) so ein Array hinbekommen:

            Array ( [test] => Array ( [def] => 1 ) )

            ... und dann sollte das klappen.

            gondor(..)

            1. okay, habs:

              $array = $_REQUEST['array'];
              $array_s['test'] = array_filter($array['test']);

              Funktioniert!

              Danke für Hilfe. Ihr seid 'unschlagbar' :)

              gondor(..)

            2. echo $begrüßung;

              $array_r = $_REQUEST['array'];

              Das Anlegen einer neuen Variable aus $_REQUEST/$_GET/$_POST/... ist übrigens nicht erforderlich. Genauso wie du hier lesend darauf zugegriffen hast kannst du das an anderen Stellen auch tun. Und nicht nur das, auch das Schreiben ist uneingeschränkt möglich.

              Array ( [test] => Array ( [abc] => [def] => 1 [ghi] => ) )
              jetzt muss ich (nur) so ein Array hinbekommen:
              Array ( [test] => Array ( [def] => 1 ) )

              Das lässt sich mit einem Zweizeiler aus foreach und array_filter() hinbekommen.

              echo "$verabschiedung $name";