0

我对 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;
}

感谢您对此的任何帮助。

4

5 回答 5

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 />";
}
于 2013-10-17T17:54:54.927 回答
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 />";
于 2013-10-17T18:01:49.037 回答
1

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

第一个是删除您的switch语句,并改用 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 />";

如您所见,仍然存在一些冗余,可以通过使用数组轻松删除。只需遍历数组,您甚至$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()", "将通过在每个元素之间添加胶水(此处为 )来转换您的数组。

于 2013-10-17T18:04:50.340 回答
0

如果链接不是一些预先构建的静态列表,那么这种功能最好使用循环来处理。您需要执行以下操作:

$message = "start of the string";
foreach ($vars as $var) {
    $message .= "link for this particular $var";
}
$message .= "end of the string";
于 2013-10-17T17:54:40.157 回答
0

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

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

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

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

$message .= "<br><br>";
于 2013-10-17T18:01:11.653 回答