我可以缩短/清理此代码吗?

时间:2016-04-25 17:29:33

标签: php

我真的很生气,因为有这么多的IF,Else If声明....有没有办法缩短它,让它看起来更干净,更好但仍然有同样的效果?

if(!empty($ck1))
{
    $ck1 = 'Tiger';
}
else
{
    $ck1 = '';
}


if(!empty($ck2))
{
    $ck2 = 'Bears';
}
else
{
    $ck2 = '';
}
if(!empty($ck3))
{
    $ck3 = 'Owls';
}
else
{
    $ck3 = '';
}

3 个答案:

答案 0 :(得分:1)

这样的事情可能是最干净的,假设您需要不同的默认值。

$vars = array(
    'ck1' => 'Tiger',
    'ck2' => 'Owl',
    ...
    'ck36' => 'Foo'
    );
foreach($vars as $var=>$default) {
    $$var = !empty($$var) ? $default : '';
}

您可以动态使用for并构建$var,但处理默认值会很痛苦(特别是编辑会导致错误,而不是以后),所以它不值得。< / p>

修改

$vars数组包含您要作为键处理的变量名称,默认值作为值。所以你可以拥有你喜欢的那么多。

编辑2

谨防变量范围。你还说ck来自Check boxes on a form。如果是,那么这意味着您启用了register_globals?如果是这样,这是个坏主意,你应该尽快禁用它。

编辑3

通过在变量名标记中使用[],您应该将它们组织为数组,而不是拥有大量变量:

<input name="ck[]" value="Foo">
<input name="ck[]" value="Bar">

然后所有输入(如果是复选框,当然都经过检查)可以在$_POST['ck']中轻松找到。如果您想要查看特定项目,也可以添加自己的索引:

<input name="ck[foo]" value="Foo">

$_POST['ck']['foo']的形式提供。这样可以使您的代码更清晰,即:

$input = $_POST['ck'];

$vars = array(
    'ck1 => 'Tiger',
    'ck2' => 'Owl,
    ...
    'ck36' => 'Foo'
    );
foreach($vars as $key=>$default) {
    $input[$key] = !empty($input[$key]) ? $default : '';
}

然后你可以在你的代码中进一步使用$input,而不是在脚本范围内有大量的变量。

答案 1 :(得分:0)

您可以使用三元运算符:

$ck1 = !empty($ck1) ? 'Tiger' : '';
$ck2 = !empty($ck2) ? 'Bears' : '';
$ck3 = !empty($ck3) ? 'Owls' : '';

从技术上讲,它仍然是一堆if语句,但它更简洁。

如果你有很多东西要引用,你可以创建一个数组并循环遍历它:

$cks = array(
  'ck1' => 'Tiger',
  'ck2' => 'Bears',
  'ck3' => 'Owls',
  ...
);
foreach($cks as $var => $value) {
  $$var = !empty($$var) ? $value : '';
}

答案 2 :(得分:-1)

也许&#39; switch&#39;声明可以帮助你