2016-06-17 5 views
1

Also habe ich diesen Code bekommt ...Mehrere nahezu identisch, wenn Aussagen verkürzt werden müssen

Code:

if(empty($day0[2])) { 
     echo "<td>".$day0[1]."<br></td>"; 
    } else { 
     if(strcmp($day0[1],"Absent") == 0) { 
      echo "<td>".$day0[1]."<br>Time: N/A</td>"; 
     } else { 
      echo "<td>".$day0[1]."<br>Time: "[email protected]$day0[2]." - "[email protected]$day0[3]."</td>"; 
     } 
    } 

    if(empty($day1[2])) { 
     echo "<td>".$day1[1]."<br></td>"; 
    } else { 
     if(strcmp($day1[1],"Absent") == 0) { 
      echo "<td>".$day1[1]."<br>Time: N/A</td>"; 
     } else { 
      echo "<td>".$day1[1]."<br>Time: "[email protected]$day1[2]." - "[email protected]$day1[3]."</td>"; 
     } 
    } 

    if(empty($day2[2])) { 
     echo "<td>".$day2[1]."<br></td>"; 
    } else { 
     if(strcmp($day2[1],"Absent") == 0) { 
      echo "<td>".$day2[1]."<br>Time: N/A</td>"; 
     } else { 
      echo "<td>".$day2[1]."<br>Time: "[email protected]$day2[2]." - "[email protected]$day2[3]."</td>"; 
     } 
    } 

    if(empty($day3[2])) { 
     echo "<td>".$day3[1]."<br></td>"; 
    } else { 
     if(strcmp($day3[1],"Absent") == 0) { 
      echo "<td>".$day3[1]."<br>Time: N/A</td>"; 
     } else { 
      echo "<td>".$day3[1]."<br>Time: "[email protected]$day3[2]." - "[email protected]$day3[3]."</td>"; 
     } 
    } 

    if(empty($day4[2])) { 
     echo "<td>".$day4[1]."<br></td>"; 
    } else { 
     if(strcmp($day4[1],"Absent") == 0) { 
      echo "<td>".$day4[1]."<br>Time: N/A</td>"; 
     } else { 
      echo "<td>".$day4[1]."<br>Time: "[email protected]$day4[2]." - "[email protected]$day4[3]."</td>"; 
     } 
    } 

    if(empty($day5[2])) { 
     echo "<td>".$day5[1]."<br></td>"; 
    } else { 
     if(strcmp($day5[1],"Absent") == 0) { 
      echo "<td>".$day5[1]."<br>Time: N/A</td>"; 
     } else { 
      echo "<td>".$day5[1]."<br>Time: "[email protected]$day5[2]." - "[email protected]$day5[3]."</td>"; 
     } 
    } 

    if(empty($day6[2])) { 
     echo "<td>".$day6[1]."<br></td>"; 
    } else { 
     if(strcmp($day6[1],"Absent") == 0) { 
      echo "<td>".$day6[1]."<br>Time: N/A</td>"; 
     } else { 
      echo "<td>".$day6[1]."<br>Time: "[email protected]$day6[2]." - "[email protected]$day6[3]."</td>"; 
     } 
    } 

Wo Tag 0-6 Sonntag bis Samstag gleich, und die Array-Nummern angebracht zu jeder gleicht einer anderen Variable in einem multi-dim Array.

Das sind mehrere if-Anweisungen, die alle exakt gleich sind, mit Ausnahme des Variablennamens in jedem einzelnen. Ich war nicht in der Lage, einen Weg zu finden, dies kürzer zu machen, also dachte ich, ich würde hier posten, um zu sehen, ob jemand Ideen hat, wie ich das in kürzeren Codezeilen kombinieren kann. Mir geht es vor allem darum, dass mein Code ordentlicher aussieht und besser funktioniert, und ich denke, dass dies vielen Leuten gute Möglichkeiten bieten könnte, ihren Code ein wenig zu verkürzen.

+4

für Dies kann besser geeignet sein http://codereview.stackexchange.com – Raidri

+1

eine Funktion erstellen, in dem Sie die Variablen stattdessen übergeben. –

+1

@Raidri Ah, du hast vollkommen recht! Das habe ich komplett vergessen. – GrumpyCrouton

Antwort

1

@MagnusEriksson schlug vor, eine Funktion zu machen, ich denke, das ist der beste Weg, es zu tun.

Von 69 Zeilen Code bis 18 Zeilen Code.

function displayTime($day1,$day2,$day3) { 
    if(empty($day2)) { 
     return "<td>{$day1}<br></td>"; 
    } else { 
     if(strcmp($day1,"Absent") == 0) { 
      return "<td>{$day1}<br>Time: N/A</td>"; 
     } 
     return "<td>{$day1}<br>Time: {$day2} - {$day3}</td>"; 
    } 
} 

for ($x = 0; $x <= 6; $x++) { 
    echo displayTime(${"day$x"}[1],${"day$x"}[2],${"day$x"}[3]); 
} 
+0

Es ist zu gute Idee ... @GrumpyCrouton –

+1

Das einzige, was ich ändern würde, ist die Funktion die Zeichenfolge zurückgeben, anstatt es zu echo. Aber das bin nur ich, hasse es, wenn Funktionen Dinge widerspiegeln, ohne dass du Kontrolle darüber hast, wo und wann. –

+0

@MagnusEriksson Normalerweise würde ich zustimmen, aber so oder so wird es nur eine Sache widerhallen. – GrumpyCrouton

2

Erste merge alle Array von $ day [n] in bis $ finalArray

foreach($finalArray as $key=>$value){ 
    if(empty($value[2])) { 
     echo "<td>".$value[1]."<br></td>"; 
    } else { 
     if(strcmp($value[1],"Absent") == 0) { 
      echo "<td>".$value[1]."<br>Time: N/A</td>"; 
     } else { 
      echo "<td>".$value[1]."<br>Time: "[email protected]$value[2]." - "[email protected]$value[3]."</td>"; 
     } 
    } 
} 
1

Bitte versuchen Sie es mit diesem Code.

$array=array($day0,$day1,$day2,$day3); 

    for($i=0;$i<count($array);$i++){ 
     if(empty($day.$i[2])) { 
      echo "<td>".$day.$i[1]."<br></td>"; 
     } else { 
      if(strcmp($day.$i[1],"Absent") == 0) { 
       echo "<td>".$day.$i[1]."<br>Time: N/A</td>"; 
      } else { 
       echo "<td>".$day.$i[1]."<br>Time: "[email protected]$day.$i[2]." - "[email protected]$day.$i[3]."</td>"; 
      } 
     } 
    } 
+0

Funktioniert das tatsächlich? Unabhängig davon benötigt diese Antwort eine Erklärung, um vollständig zu sein. – mickmackusa

Verwandte Themen