几个几乎相同的if语句需要缩短

时间:2016-06-17 13:14:33

标签: php

所以我有这个代码......

代码:

    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: ".@$day0[2]." - ".@$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: ".@$day1[2]." - ".@$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: ".@$day2[2]." - ".@$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: ".@$day3[2]." - ".@$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: ".@$day4[2]." - ".@$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: ".@$day5[2]." - ".@$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: ".@$day6[2]." - ".@$day6[3]."</td>";
        }
    }

第0-6天等于星期日到星期六,每个星号附加的数组编号等于多调光阵列中的不同变量。

除了每个语句中的变量名之外,这几个if语句都完全相同。我还没有找到一种方法来缩短它,所以我想我会在这里发帖试试看看是否有人对如何将它组合成更短的代码行有任何想法。我的代码看起来更整洁,功能更好,我认为这可以教会很多人很好地缩短他们的代码。

3 个答案:

答案 0 :(得分:2)

首先将$ day [n]的所有数组合并到$ 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: ".@$value[2]." - ".@$value[3]."</td>";
        }
    }
}

答案 1 :(得分:1)

请尝试使用此代码。

    $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: ".@$day.$i[2]." - ".@$day.$i[3]."</td>";
            }
        }
    }

答案 2 :(得分:1)

@ MagnusEriksson建议创建一个函数,我认为这是最好的方法。

从69行代码到18行代码。

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]);
}