此代码正常运行。但是,我正在考虑缩短它的方法,因为我还在学习PHP。我正在使用此代码段生成我要发送给某人的电子邮件的标题。
foreach($_POST as $key => $value) {
if(strpos($key,'cloud') !== false && !$a) {
$title .= "CS ";
$a = true;
}
if(strpos($key,'dco') !== false && !$b) {
$title .= "DC ";
$b = true;
}
if(strpos($key,'comm') !== false && !$c) {
$title .= "BC ";
$c = true;
}
if(strpos($key,'fiber') !== false && !$d) {
$title .= "FC ";
$d = true;
}
}
我很确定他们做同样的事情(所有的if语句)。如果您有什么建议/建议,请告诉我!
干杯!
答案 0 :(得分:2)
您可以简单地创建功能。这段代码应该有效:
foreach($_POST as $key => $value) {
checkstrpos($key,'cloud',$a,$title,"CS ");
checkstrpos($key,'dco',$b,$title,"DC ");
checkstrpos($key,'comm',$c,$title,"BC ");
checkstrpos($key,'fiber',$d,$title,"FC ");
}
function checkstrpos($key,$text, &$variable, &$title, $add) {
if(strpos($key,$text) !== false && !$variable) {
$title .= $add;
$variable = true;
}
}
另一种不使用引用的解决方案:
foreach($_POST as $key => $value) {
list($title, $a) = checkstrpos($key,'cloud',$a,$title,"CS ");
list($title, $b) = checkstrpos($key,'dco',$b,$title,"DC ");
list($title, $c) = checkstrpos($key,'comm',$c,$title,"BC ");
list($title, $d) = checkstrpos($key,'fiber',$d,$title,"FC ");
}
function checkstrpos($key,$text, $variable, $title, $add) {
if(strpos($key,$text) !== false && !$variable) {
$title .= $add;
$variable = true;
}
return array($title, $variable);
}
答案 1 :(得分:0)
对我来说,我认为代码很简单。
如果您试图缩短代码,则可能会使代码更难阅读。
我的一条评论是不使用通用变量名称,如$a
,$b
,$c
和$d
。请改用正确的描述性变量名称。
您可以交换这些条件的位置,即更改
if(strpos($key,'dco') !== false && !$b)
到
if(!$b && strpos($key,'dco') !== false)
但这更像是一种微观优化,而不是简化或改变可读性。
答案 2 :(得分:0)
不使用函数的另一种解决方案:
$infos = array(
array('cloud', 'CS', &$a),
array('dco', 'DC', &$b),
array('comm', 'BC', &$c),
array('fiber', 'FC', &$d)
);
foreach($_POST as $k => $v) {
foreach($infos as $info) {
if ( !$info[2] && strpos($k, $info[0]) !== false) {
$title .= $info[1]. ' ';
$info[2] = true;
}
}
}
这不是最好的方法。正如在另一个答案中所建议的那样,使用函数会更好:匿名函数(也称为闭包)。