Ankündigung

Einklappen
Keine Ankündigung bisher.

Keys aus Array löschen die keinen Wert beinhalten?

Einklappen

Neue Werbung 2019

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

  • Keys aus Array löschen die keinen Wert beinhalten?

    Hi Phreaks,
    ich habe ein HTML Formular aus welchem die Werte an das folgende
    Multidimensionale Array übergeben werden, das Formular ist eine
    Positionsliste einer Bestellung und hat deshalb eine vorgegebene anzahl
    von Textfeldern die nicht immer ausgefüllt sind. Ich muss jetzt das Array
    nach den schlüsseln suchen die keinen Wert beinhalten und infolgedessen
    diese aus dem Array löschen.
    PHP-Code:
    $positionen = array();
    for (
    $i=0$i<30$i++) {
      
    $tmp = array('pos'     => $_POST['pos'][$i],
                   
    'mng'           => $_POST['mng'][$i],
                   
    'ArtId'          => $_POST['ArtId'][$i],
                   
    'ArtTp'         => $_POST['ArtTp'][$i],
                   
    'EzPr'           => $_POST['EzPr'][$i],
                   
    'EzPrRab'      => $_POST['EzPrRab'][$i],
                   
    'ArtBem'       => $_POST['ArtBem'][$i]);
      if (isset(
    $tmp['mng']) && $tmp['mng'] != "") {
        
    array_push($positionen$tmp);
      }
     } 
    Ich weiss das dies mit 'unset()' funktionieren sollte aber ich weiss nicht
    wie ich das in meinem Array anwenden soll. Ich habe es bereits versucht
    mit volgendem Beispiel doch das Array wird zwar durchgeschliefen aber
    nicht gesäubert!
    PHP-Code:
    foreach($positionen as $key => $value) {
      if(
    $value == "") {
        unset(
    $positionen[$key][mng]);
      }
    }
    $npositionen array_values($positionen); 

  • #2
    Warum überprüfst du das nicht schon beim Reinschreiben der POST-Werte in den Array bzw. wozu benötigst du überhaupt den $tmp Array? POST ist doch schon wunderbar aufgebaut.

    Aber du könntest mit array_walk() die Elemente durchlaufen und leere Elemente (die kein Array sind) zerstören.

    Kommentar


    • #3
      Danke für die schnelle Antwort,
      Die POST ausgabe beinhaltet noch die Kundendaten die ich nur so wie sie sind in die DB
      schreibe deshalb habe ich die Positionen heraus Extrahiert um nur diese zu prüfen.
      Aber ich werde es mal versuchen die Werte im Vorfeld zu prüfen!
      Danke MfG Rix!

      Kommentar


      • #4
        Also ich denke das ich bei der Syntax etwas falsch mache und nicht den
        richtigen Key anspreche! Kannst du mir Bitte ein kleines beispiel zeigen, den
        am besten und schnellsten Lerne ich durch beispiele!
        Danke für deine Mühe!
        PHP-Code:
        <?php
        array_walk
        ($positionen) {
          if(
        $positionen == "") {
            unset(
        $positionen);
          }
        }
        ?>

        Kommentar


        • #5
          Du möchtest bestimmt mal in der Doku nachlesen, wie array_walk funktioniert: http://de3.php.net/manual/de/function.array-walk.php Beispiele gibt's dort auch.

          Gruß
          phpfan

          Kommentar


          • #6
            Ok Danke für alles habs mit
            PHP-Code:
            <?php
            for ($i=0$i<30$i++) {
                if (
            $positions[$i][pos] ==! '') {
                print(
            balbla)
            ?>
            hinbekommen!

            Kommentar


            • #7
              1. Es gibt für Arrays extra die foreach-Schleife
              2. assoiative Indizes immer (!) in Anführungszeichen, wenn es keine Variable oder Konstante ist!

              Übrigens: Optisch etwas komplizierter, aber auch wirkungsvoll
              PHP-Code:
              <?php
              $array 
              array_filter ($arraycreate_function '$val''return (!empty($val["pos"]))') );
              ?>

              Kommentar


              • #8
                Hi.

                Setz mal deinen error_reporting-Wert hoch. Eigentlich sollten die Felder doch garnicht übertragen
                werden, wenn sie leer sind, folglich solltest du Warnungen bekommen, wenn du trotzdem drauf
                zugreifst.

                Mein Vorschlag:

                Das Formular so aufbauen, dass du ein 3-Dimensionales Array bekommst, dessen erster Index für alle
                Werte dieser Liste konstant ist, dessen zweiter Index von 1 bis 30 durchnummeriert ist und dessen
                dritter Index das Attribut/Feld in der Zeile angibt (name="positionen[1][ArtID]").

                Dann einfach rauskopieren:
                PHP-Code:
                <?php
                if (!empty($_POST['positionen']) and is_array($_POST['positionen']))
                    
                $aPositionen $_POST['positionen'];

                // dann:

                foreach ($aPositionen as $aPosition)
                    echo 
                "ArtID: "$aPosition['ArtID'], "
                \n"
                ;
                ?>
                Falls du einen fortlaufenden Index brauchst:
                PHP-Code:
                <?php
                $aPositionen 
                array_values($_POST['positionen']);
                ?>
                Ansonsten kannst du die Validierung eben auch "vorziehen":
                PHP-Code:
                <?php
                $aPositionen 
                = array();
                if (isset(
                $_POST['positionen']) and is_array($_POST['positionen'])) {

                    foreach (
                $_POST['positionen'] as $aPosition)
                        if (!empty(
                $aPosition)) $aPositionen[] = $aPosition;
                }
                ?>
                Basti

                Kommentar

                Lädt...
                X