使用if(!empty),多个变量不在数组中

HGB*_*HGB 16 php is-empty

我试图用if(!empty)PHP中的函数抛光一些代码,但我不知道如何将它应用于多个变量,当它们不是一个数组时(我以前必须这样做)所以如果我有:

$vFoo       = $item[1]; 
$vSomeValue = $item[2]; 
$vAnother   = $item[3];
Run Code Online (Sandbox Code Playgroud)

然后我想只在有值时才打印结果.这适用于一个变量,所以你有:

 if (!empty($vFoo)) {
     $result .= "<li>$vFoo</li>";
 }
Run Code Online (Sandbox Code Playgroud)

我尝试了一些类似的东西

if(!empty($vFoo,$vSomeValue,$vAnother) {
    $result .= "<li>$vFoo</li>"
    $result .= "<li>$vSomeValue</li>"
    $result .= "<li>$vAnother</li>"
}
Run Code Online (Sandbox Code Playgroud)

但是,当然,它不起作用.

imk*_*vid 35

你可以创建一个新的包装器函数,它接受多个参数并通过empty()传递每个参数.它的工作方式类似于isset(),仅当所有参数都为空时返回true,并在到达第一个非空参数时返回false.这是我想出来的,它在我的测试中起作用.

function mempty()
{
    foreach(func_get_args() as $arg)
        if(empty($arg))
            continue;
        else
            return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

旁注:"mempty"中的前导"m"代表"多重".您可以随意调用它,但这似乎是最短/最简单的命名方式.除此之外......说起来很有趣.:)

更新10/10/13:我应该添加,不像empty()或isset(),如果你传递一个未定义的变量或一个不存在的数组索引,这个mempty()函数将哭泣血腥谋杀.

  • 这应该是最好的答案.一个简洁的辅助函数,我可以在多个地方重用. (2认同)

mar*_*rio 18

你需要写一个条件链.使用&&测试多个变量,每个自己的empty()测试:

if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) {
Run Code Online (Sandbox Code Playgroud)

但是您可能希望将其拆分为三个ifs,因此您可以单独应用额外的文本:

if (!empty($vFoo)) {
   $result .= "<li>$vFoo</li>";
}
if (!empty($vSomeValue)) {
   $result .= "<li>$vSomeValue</li>";
}
if (!empty($vAnother)) {
Run Code Online (Sandbox Code Playgroud)


And*_*rew 7

empty()只能接受一个论点.isset()另一方面,可以接受多个; 当且仅当设置了所有参数时,它才会返回true.但是,这只会检查它们是否已设置,而不是它们是否为空,所以如果你需要专门排除空字符串,那么你将不得不做kelloti建议的那样做.


kel*_*oti 6

使用布尔/逻辑运算符:

if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) {
    $result .= "<li>$vFoo</li>"
    ...
}
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望加入这些or而不是and.如您所见,这可以为您提供相当大的灵活性.

  • 使用"&&"代替"和" (5认同)