Sven Rautenberg: Array-Auswertung optimieren

Beitrag lesen

Moin!

Ich habe folgenden Test-Code für die Ausgabe geschrieben:

Den Code kann man schon mal recht einfach optimieren, indem man $_POST['ID'] weglässt, und direkt die Variable $i benutzt, die die Schleife anlegt.

<form action="test.php" method="post">
  <table>
    <?php
    for ($i=1; $i<5; $i++) {

// Das hier ist sinnlos: $_POST['ID'] = $i;

echo "<tr>";
      echo "<td>";
      echo "ID: $i ";
      echo "Bewertung: <input type="checkbox" name="ImgRating[".$i."]" value="ImgRatingActivated" />";
      echo "Kommentare: <input type="checkbox" name="ImgComments[".$i."]" value="ImgCommentsActivated" />";
      echo "Anzeigen: <input type="checkbox" name="ImgView[".$i."]" value="ImgViewActivated" />";
      echo "</td>";
      echo "</tr>";
    }
    ?>
    <tr>
      <td>
<input type="submit" name="formUpdateSubmit" value="speichern" />
      </td>
    </tr>
  </table>
</form>

  
Wenn du hingegen die drei Input-Felder in EINEM gemeinsamen Array als Keys haben willst, wäre folgende Struktur für die Input-Namen besser:  
  
name="img[$i][rating]", name="img[$i][comments]", name="img[$i][view]"  
  
Und dein Code hier wäre dann:  
  

> Der oben ausgegebene Code wird mit folgendem Code ausgewertet:  

~~~php
  
<?php  
if (isset($_POST['formUpdateSubmit'])) {  
  if (is_array($_POST['img'])) {  
    foreach ($_POST['img'] as $key => $value) {  
      echo $key;  
      echo $value['rating'];  
      echo $value['comments'];  
      echo $value['view'];  
    }  
  }  
}  
?>  

Auf diese Weise ist das Resultat des auswertenden Codes deutlich lesbarer.

Wenn es darum geht, das Array hinterher auch noch in mehreren Arten zu sortieren, ist übrigens die umgekehrte Reihenfolge der Indices besser:

name="img[rating][$i]", name="img[comments][$i]", name="img[view][$i]"

  
<?php  
if (isset($_POST['formUpdateSubmit'])) {  
  if (is_array($_POST['img'])) {  
  
    sort($_POST['img']['rating']); // sortieren nach rating!  
  
    // Ausgeben nach Rating  
    foreach ($_POST['img']['rating'] as $key => $value) {  
      echo $key;  
      echo $_POST['img']['rating'][$key];  
      echo $_POST['img']['comments'][$key];  
      echo $_POST['img']['view'][$key];  
    }  
  
    // Ausgeben nach View (unsortiert, andere Reihenfolge wie oben)  
    foreach ($_POST['img']['view'] as $key => $value) {  
      echo $key;  
      echo $_POST['img']['rating'][$key];  
      echo $_POST['img']['comments'][$key];  
      echo $_POST['img']['view'][$key];  
    }  
  
  }  
}  
?>  

- Sven Rautenberg