PHP 代码清理(多个 if、else if、else)


PHP Code Cleanup (Multiple If, Else If, Else)

我有这段代码。 它有效,但我相信有一种更简单、更合乎逻辑的方法。 为了节省问题,由于以前的代码,$seriespart而不是$row["SeriesPart"]是特定的。

// normal titling convention is Number - Series - Series Part - Sermon
if ($row["Number"] && $row["Series"] && $row["SeriesPart"] && $row["Sermon"]) $title = $row["Number"]." - ".$row["Series"]." - Pt. ".$seriespart." - ".$row["Sermon"];
    // but sometimes a series doesn't have sermon titles
    else if ($row["Number"] && $row["Series"] && $row["SeriesPart"]) $title = $row["Number"]." - ".$row["Series"]." - Pt. ".$seriespart;
        // series that are in process don't have product numbers
        else if ($row["Series"] && $row["SeriesPart"] && $row["Sermon"]) $title = $row["Series"]." - Pt. ".$seriespart." - ".$row["Sermon"];
            // but sometimes a series doesn't have sermon titles
            else if ($row["Series"] && $row["SeriesPart"]) $title = $row["Series"]." - Pt. ".$seriespart;
                // and we don't want product singles just showing a sermon title (it should say S74 - Title as a distinction from other oddball sermons)
                // note the substr() as we want it to say S71 and not S0171
                else if ($row["Number"] >= "0100" && $row["Number"] <= "0199") $title = "S".substr($row["Number"], 2)." - ".$row["Sermon"];
                    // just show the bloody sermon title already
                    else $title = $row["Sermon"];

我们有一堆布道。 这些讲道通常是一个系列的一部分。 如果一个系列完成,它将有一个系列号、系列标题、系列部分,以及可选的讲道标题、讲道部分、副标题和副标题部分。 如果一个系列没有完成,就不会有序列号。 有时,没有讲道的标题。 如果它不是系列的一部分,那么它本身就是一个实际的产品。 其他时候,它只是一个古怪的讲道,不是任何东西的一部分。

例子。。。

被医治(仅讲道,不是系列的一部分,古怪(

S45 - 吸盘还是播种机?(单身是商品(

助手 - 第 1 部分 - 您需要帮助吗?(系列进行中,无序列号(

0513 - 哈登不是你的心 - 第2部分(已完成系列,没有讲道标题(

1101 - 神的榮耀 - 第11集 - 神如何榮耀我們 - 第5集 - 藉著我們 - 第3集(連續系列,講道標題 - 講道部分 - 副標題 - 副標題部分(

关于如何清理代码的任何想法,这样我就不必继续重复相同的信息,如果,否则,否则?

我认为这将做你想要的:

$parts = array();
if ($row["Number"] && ($row["Number"] < "Music01" || $row["Number"] > "Music99"))
{
    if ($row["Number"] >= "0100" && $row["Number"] <= "0199") $parts[] = "S". substr($row["Number"], 2);
    else $parts[] = $row["Number"];
}
if ($row["Series"]) $parts[] = $row["Series"];
if ($row["SeriesPart"]) $parts[] = "Pt. $seriespart";
if ($row["Sermon"]) $parts[] = $row["Sermon"];
$title = implode(" - ", $parts);
$title = '';
if ($row["Series"] && $row["SeriesPart"]) {
    if ($row["Number"]) {
        $title .= $row["Number"]." - ";
    // series that are in process don't have product numbers
    }
    $title .= $row["Series"]." - Pt. ".$seriespart;
    if ($row["Sermon"]) {
        $title .= " - ".$row["Sermon"];
    }
// and we don't want product singles just showing a sermon title (it should say S74 - Title as a distinction from other oddball sermons)
// note the substr() as we want it to say S71 and not S0171
} elseif ($row["Number"] >= "0100" && $row["Number"] <= "0199") {
    $title = "S".substr($row["Number"], 2)." - ".$row["Sermon"];
}
// just show the bloody sermon title already
else {
    $title = $row["Sermon"];
}

如果你不想部分创建

if ($row["Series"] && $row["SeriesPart"]) {
    if ($row["Number"]) {
        if ($row["Sermon"]) {
            $title = $row["Number"]." - ".$row["Series"]." - Pt. ".$seriespart." - ".$row["Sermon"];
            // but sometimes a series doesn't have sermon titles
        } else {
            $title = $row["Number"]." - ".$row["Series"]." - Pt. ".$seriespart;
        }
    // series that are in process don't have product numbers
    } else {
        if ($row["Sermon"]) {
            $title = $row["Series"]." - Pt. ".$seriespart." - ".$row["Sermon"];
        // but sometimes a series doesn't have sermon titles
        } else {
            $title = $row["Series"]." - Pt. ".$seriespart;
        }
    }
// and we don't want product singles just showing a sermon title (it should say S74 - Title as a distinction from other oddball sermons)
// note the substr() as we want it to say S71 and not S0171
} elseif ($row["Number"] >= "0100" && $row["Number"] <= "0199") {
    $title = "S".substr($row["Number"], 2)." - ".$row["Sermon"];
}
// just show the bloody sermon title already
else {
    $title = $row["Sermon"];
}