如何在PHP中测试多个var是否为空?

时间:2010-01-25 16:22:08

标签: php

我如何测试var是否为空? 我有这个数组

array($myname,$myhouse,$mywife);

如果没有使用循环,我如何检查每个

7 个答案:

答案 0 :(得分:8)

你所要求的是不可能的或滑稽的。您需要按名称显式测试每个变量,或使用循环来测试动态的变量集合。

答案 1 :(得分:7)

一行(当然除了功能):

function not_empty($val) {
    return !empty($val);
}

$result = array_product(array_map('not_empty',$array));

如果一个变量为空,则结果为0,否则为1 但当然不会告诉哪一个是空的。 ;)

请参阅array_maparray_product

答案 2 :(得分:5)

如果你的意思是没有写循环,那么你可以使用:

in_array(true, array_map(create_function('$x', 'return empty($x);'),$array));

当然,它会隐式地遍历你的数组,实际上是两次!一旦检查空虚,再次检查结果。当你达到non_empty值时,你最好使用一个循环。

答案 3 :(得分:3)

$myvars = array($myname, $myhouse, $mywife);
foreach ($myvars as $value) {
  if (empty($value)) {
    // value is empty
  }
}

编辑:这是一个不使用循环的版本:

$myvars = array($myname, $myhouse, $mywife);
$myvars_filtered = array_filter($myvars, "empty"); // or isset, if you prefer
if (count($myvars_filtered) > 0) {
  // one or more values were empty
}

请注意,正如Felix评论的那样,当您使用"isset"代替"empty"时,您将获得具有值的所有值,而不是那些不具有值的值。因此,在这种情况下,您需要将$myvars中的元素数量与$myvars_filtered中的元素数量进行比较。

答案 4 :(得分:2)

尝试isset()

编辑 - 使用上面发布的代码,但更改功能:

$myvars = array($myname, $myhouse, $mywife);
foreach ($myvars as $value) {
 if (isset($value)) {
  // Not set
 }
}

According to this, isset is marginally faster.

答案 5 :(得分:1)

另一种不使用循环的解决方案:

<?php
$my_house = "";
$my_name = "Foo Bar";
$my_wife = "Angelina";

$arr = array($my_house, $my_name, $my_wife);
preg_replace("/.+/","-",$arr,-1,$count);
if ($count == 3) {
  # everything is filled
} else {
  # missing somehwere
}
?>

答案 6 :(得分:1)

当然有办法做到这一点。其中之一:

<?php
$array = array('myname' => 'Jakob', 'myhouse' => '', 'mywife' => 1);

$empty_elements = array("");
$array = array_keys(array_intersect($array,$empty_elements));

var_dump($array);
?>

输出:

阵列   0 =&gt;字符串'myhouse'

类似问题的其他一些可能性(删除空问题):http://hasin.wordpress.com/2009/09/16/removing-empty-elements-from-an-array-the-php-way/