7 Stimmen

Wie kann man die folgende Schleife komprimierter ausführen?

Ich habe die folgende for-Schleife. Sie verwendet die Werte 0-6 aus Montag-Sonntag jeweils.

Gibt es eine kompaktere Möglichkeit, dies zu tun? Im Gegensatz zu einer Auflistung der if ($i=="day")

// $i = 0 is monday... $i = 6 is Sunday
for($i=0;$i<7;$i++){

    if ($i==0)
        echo ' <input name="repeat_on_week[]" type="checkbox" value="0"  /> Monday';
    if ($i==1)
        echo ' <input name="repeat_on_week[]" type="checkbox" value="1" /> Tuesday';
    if ($i==2)
        echo ' <input name="repeat_on_week[]" type="checkbox" value="2" /> Wednesday';
    if ($i==3)
       echo ' <input name="repeat_on_week[]" type="checkbox" value="3" /> Thursday';
    if ($i==4)
       echo ' <input name="repeat_on_week[]" type="checkbox" value="4" /> Friday';
    if ($i==5)
        echo ' <input name="repeat_on_week[]" type="checkbox" value="5" /> Saturday';
    if ($i==6)
        echo ' <input name="repeat_on_week[]" type="checkbox" value="6" /> Sunday';

}

0 Stimmen

Obwohl nicht anwendbar auf diese genaue Frage, möchte ich sanft injizieren eine Erweiterung zu den oben genannten Code; nach dem ersten 'if', der Rest könnte (sollte) sein 'else if' (oder 'elif', ich bin nicht ein php afficianado)

16voto

Vivin Paliath Punkte 90791

Wie wäre es damit:

$days = array('Monday', 
              'Tuesday', 
              'Wednesday', 
              'Thursday', 
              'Friday', 
              'Saturday', 
              'Sunday'
        );

for($i = 0; $i < 7; $i++) {
   echo '<input name = "repeat_on_week[]" type = "checkbox" value = "' . $i . '" />' . $days[$i];
}

Oder verwenden Sie eine foreach Es ist einfacher für die Augen und man muss nicht die Länge des Feldes herausfinden:

for($days as $i => $day) {
   echo "<input name = \"repeat_on_week[]\" type = \"checkbox\" value = \"$i\" /> $day";
}

Es ist ein gutes Zeichen, dass du gedacht hast. "Es muss doch einen besseren Weg geben!" . Es bedeutet, dass Sie sich in die richtige Richtung bewegen * . Aber ich würde auch vorschlagen, die Konzepte von Arrays aufzufrischen und zu wissen, wann es gut ist, sie zu verwenden.

* Ein guter Programmierer denkt immer, dass sein Code schlecht ist, was eine andere Möglichkeit ist, zu sagen, dass ein guter Programmierer immer versucht, sich selbst zu verbessern, was auch eine andere Möglichkeit ist, zu sagen, dass ein guter Programmierer ist bescheiden .

4voto

Richard Fearn Punkte 24179
$days = array(
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
    "Sunday");

for($i=0; $i<7; $i++){
    echo ' <input name="repeat_on_week[]" type="checkbox" value="' . $i . '"  /> ' . $days[$i];
}

3voto

Jaanus Punkte 17458

Erster Weg:

$days = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");

for ($i=0; $i < 7; $i++) {
    echo ' <input name="repeat_on_week[]" type="checkbox" value="'.$i.'" /> '.$days[$i];
}

Die zweite Möglichkeit wäre, die Funktion "Datum" zu verwenden, um die Namen der Wochentage aus dem System zu erhalten, aber ich bin zu faul, um diese Berechnung herauszufinden ... Sie würden ihm Zeitstempel geben, die zu bekannten Wochentagen passen, und dann tun

date("l", $timestamp);

1voto

Nathan Punkte 3632

Ah, das hat jeder schnell verstanden, aber ich würde eine foreach-Schleife vorziehen:

$days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
foreach ($days as $i => $day) {
       echo " <input name=\"repeat_on_week[]\" type=\"checkbox\" value=\"$i\" /> $day";
}

0 Stimmen

Gibt es einen technischen Grund, foreach statt for zu verwenden? (Ist es schneller?)

0 Stimmen

Es ist einfach nur syntaktischer Zucker, und es ist einfacher.

0 Stimmen

Ja, ich glaube nicht, dass es ein Leistungsproblem gibt. Sorgen Sie sich nicht so sehr um "schneller", sondern eher um "leichter zu lesen, nachdem Sie 6 Monate nicht mehr damit gearbeitet haben".

1voto

Vlad Punkte 513

Nun ja... 4 Jahre später, aber immer noch habe ich beschlossen, eine Lösung auch zu teilen :) Bitte, siehe unten.

for ($i = 0; $i < 7; $i++) {
    echo '<input name = "repeat_on_week[]" type = "checkbox" value = "' . $i . '" />' . date('l', strtotime('Monday +' . $i . 'days'));
}

Ich hoffe, es hilft jemandem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X