PHP:正确编写代码片段(切换案例)

时间:2013-10-17 17:49:58

标签: php switch-statement

我仍然是PHP的新手,并编写以下代码片段作为创建电子邮件的较长代码的一部分。

这工作正常,但我想知道是否有办法让这更“自动化”,这样我就不必为每个文件手动编写它。 由于$ varCount显示了上传的文件数量,我只希望将它们添加为链接($ varLink)并用下面的逗号分隔,我想也许有一种方法可以避免编写所有这些情况。

我的代码(正常工作):

switch($varCount)
{
    case '1':
        $message.="<strong>Attachments:</strong>&nbsp;&nbsp;" . $varLink1 . "<br /><br />";
        break;
    case '2':
        $message.="<strong>Attachments:</strong>&nbsp;&nbsp;" . $varLink1 . " , " . $varLink2 . "<br /><br />";
        break;
    case '3':
        $message.="<strong>Attachments:</strong>&nbsp;&nbsp;" . $varLink1 . " , " . $varLink2 . " , " . $varLink3 . "<br /><br />";
        break;
    default:
        $message.="<strong>Attachments:</strong>&nbsp;&nbsp;No files uploaded<br /><br />";
        break;
}

感谢您提供任何帮助。

5 个答案:

答案 0 :(得分:2)

$ varLink可以是所有链接的数组,例如:$varLinkArray

if (!empty($varLinkArray)){
    $message.="<strong>Attachments:</strong>&nbsp;&nbsp;" . implode(", ",$varLinkArray) . "<br /><br />";
}else {
    $message .= "<strong>Attachments:</strong>&nbsp;&nbsp;No files uploaded<br /><br />";
}

答案 1 :(得分:1)

如果数组中还没有$ varLink1变量,可以使用动态变量名称来引用它们:

    $message .= "<strong>Attachments:</strong>&nbsp;&nbsp;";
    $links = [];
    for ($i = 1; $i <= $varCount; $i++) {
        $links[] = ${"varLink" . $i};
    }
    $message .= (count($links) == 0) ? "No files uploaded" : implode(" , ", $links);
    $message .= "<br /><br />";

答案 2 :(得分:1)

有多种方法可以改善您的代码。

第一个是删除开关语句,而是使用if块。像这样:

$message .= "<strong>Attachments:</strong>&nbsp;&nbsp;";
if ($varCount == 0) {
    $message .= "No files uploaded";
} else {
    $message .= $varLink1;
    if ($varCount >= 2) {
         $message .= ", " . $varLink2;
         if ($varCount >= 3) {
             $message .= ", " . $varLink3;
         }
    }
}
$message .= "<br /><br />";

如您所见,仍有一些冗余,可以使用arrays轻松删除。只需遍历数组,您甚至不再需要$varCount

// $varLinks is your array
$message .= "<strong>Attachments:</strong>&nbsp;&nbsp;";
if (empty($varLinks)) {
    $message .= "No files uploaded";
} else {
    $message .= join(", ", $varLinks);
}
$message .= "<br /><br />";

join()将通过在每个元素之间添加胶水(此处为", ")来转换您的数组。

答案 3 :(得分:0)

如果链接不是某些预先构建的静态列表,那么这种功能最好用循环来处理。你会想要做的事情:

$message = "start of the string";
foreach ($vars as $var) {
    $message .= "link for this particular $var";
}
$message .= "end of the string";

答案 4 :(得分:0)

除了默认情况外,这将产生问题代码的结果。

$aVlinks = array($varLink1,$varLink2,$varLink3);

$message .="<strong>Attachments:</strong>&nbsp;&nbsp;";

$message .= implode(",",array_slice($aVlinks,0,$varCount));

$message .= "<br><br>";