我如何测试var是否为空? 我有这个数组
array($myname,$myhouse,$mywife);
如果没有使用循环,我如何检查每个?
答案 0 :(得分:8)
你所要求的是不可能的或滑稽的。您需要按名称显式测试每个变量,或使用循环来测试动态的变量集合。
答案 1 :(得分:7)
一行(当然除了功能):
function not_empty($val) {
return !empty($val);
}
$result = array_product(array_map('not_empty',$array));
如果一个变量为空,则结果为0
,否则为1
但当然不会告诉哪一个是空的。 ;)强>
答案 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
}
}
答案 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/