Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果PHP中的变量为空,如何测试多个变量?_Php - Fatal编程技术网

如果PHP中的变量为空,如何测试多个变量?

如果PHP中的变量为空,如何测试多个变量?,php,Php,如果var为空或不为空,如何测试它? 我有这个数组 array($myname,$myhouse,$mywife); 如何在不使用循环的情况下检查它们是否为空 编辑- 使用上面发布的代码,但更改功能: $myvars = array($myname, $myhouse, $mywife); foreach ($myvars as $value) { if (isset($value)) { // Not set } } 试一试 编辑- 使用上面发布的代码,但更改功能: $myvars

如果var为空或不为空,如何测试它? 我有这个数组

array($myname,$myhouse,$mywife);
如何在不使用循环的情况下检查它们是否为空

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

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

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

$myvars = array($myname, $myhouse, $mywife);
foreach ($myvars as $value) {
 if (isset($value)) {
  // Not set
 }
}
编辑:以下是一个不使用循环的版本:

$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
}
<?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
}
?>
请注意,正如Felix所评论的,当您使用isset而不是empty时,您将获得所有有值的值,而不是没有值的值。因此,在这种情况下,您需要将$myvars中的元素数量与$myvars\u中的元素计数进行比较

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

$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
}
<?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
}
?>

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

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

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

除了函数之外,还有一行:

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

$result = array_product(array_map('not_empty',$array));
如果一个变量为空,则结果为0,否则为1。 但它当然不会告诉你哪一个是空的


请参见.

除函数外的一行:

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

$result = array_product(array_map('not_empty',$array));
如果一个变量为空,则结果为0,否则为1。 但它当然不会告诉你哪一个是空的


请参阅。

如果您的意思是不写循环,则可以使用:

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

它当然会隐式地在数组中循环,实际上是两次!一次检查空,然后再次检查结果。你最好使用一个循环,当你点击一个非空值时,你可以打破它。

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

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

它当然会隐式地在数组中循环,实际上是两次!一次检查空,然后再次检查结果。你最好使用一个循环,当你碰到一个非空值时,你可以打破它。

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

$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
}
<?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
}
?>

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

$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
}
<?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
}
?>

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

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

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

var_dump($array);
?>
产出:

排列 0=>字符串“myhouse”


对于类似问题的其他一些可能性,请删除空问题:

确保有办法做到这一点。其中一项:

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

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

var_dump($array);
?>
产出:

排列 0=>字符串“myhouse”



删除空电话时出现类似问题的其他一些可能性:

是的,但是如何检查每个电话是否已设置?您需要循环检查它们。是的,但是如何检查每个电话是否已设置?您需要循环检查它们。@streetparade:分别检查每个电话?如果空$myname | | |空$myhouse | |空$mylayer{…}但那也要长version@streetparade:如果您不想拼写每个变量,也不想使用循环,则必须使用magic。尝试使用magic.php;当心空的和空的互换。使用isset时,您将获得所有已设置的变量,以及所有未设置/为空的变量。除此之外,很好的解决方案是:@streetparade:分别检查每一个?如果空$myname | | |空$myhouse | |空$mylayer{…}但那也要长version@streetparade:如果您不想拼写每个变量,也不想使用循环,则必须使用magic。尝试使用magic.php;当心空的和空的互换。使用isset时,您将获得所有已设置的变量,以及所有未设置/为空的变量。除此之外,很好的解决方案是竖起大拇指的:在每个人的答案因为不知道你的意图而被否决之前,最好在问题中说明你不想使用循环。我很好奇:为什么没有循环?变量的内容是什么?一根绳子?又是一个数组?@Robert Greiner Ok现在会告诉大家为什么你不想使用循环?任何不明确要求您编写循环的解决方案都将在内部使用循环。正如您可以在其他注释中看到的那样,循环在任何情况下都是隐式或显式完成的。序列数组是内存中的一个连续区域。要访问单个值,必须在特定位置访问此内存区域。正如单词sequence已经暗示的那样,这只能按顺序进行。你不能一次处理每一个值。在每个人的答案因为不知道你的意图而被否决之前,最好在问题中说明你不想使用循环。我很好奇:为什么没有循环?变量的内容是什么?一根绳子?又是一个数组?@Robert Greiner Ok现在会告诉大家为什么你不想使用循环?任何不明确要求您编写循环的解决方案都将在内部使用循环。正如您可以在其他注释中看到的那样,循环是在任何ca中完成的
se,隐式或显式。序列数组是内存中的一个连续区域。要访问单个值,必须在特定位置访问此内存区域。正如单词sequence已经暗示的那样,这只能按顺序进行。你不能一次处理每一个值。哦,这太聪明了。。。但当然,使用映射函数意味着在幕后仍有一些循环。这真是太聪明了!不错。哦,这真聪明。。。但当然,使用映射函数意味着在幕后仍有一些循环。这真是太聪明了!很好。有一些方法…想知道为什么这个答案已经有5票了。现在甚至接受了?奇怪的已经有了一些聪明的答案。即使聪明的答案也有循环,但它们对开发人员是隐藏的。也许这是一个作业/家庭作业问题?@fructedWithFormsDesigner是正确的-您可以提出的每个方法都需要循环或显式列表。数组\映射数组中所有项的循环。如果不迭代数组的内容,就无法将值连接在一起。仅仅因为你没有写“foreach”并不意味着它不是一个循环。是的,这很愚蠢。不编写循环并不意味着不使用循环。唯一的另一个选择是逐个检查值并对其进行硬编码。有一些方法…想知道为什么这个答案已经有5票赞成。现在甚至接受了?奇怪的已经有了一些聪明的答案。即使聪明的答案也有循环,但它们对开发人员是隐藏的。也许这是一个作业/家庭作业问题?@fructedWithFormsDesigner是正确的-您可以提出的每个方法都需要循环或显式列表。数组\映射数组中所有项的循环。如果不迭代数组的内容,就无法将值连接在一起。仅仅因为你没有写“foreach”并不意味着它不是一个循环。是的,这很愚蠢。不编写循环并不意味着不使用循环。唯一的另一个选择是逐个检查值并对其进行硬编码哦,这也是一个很好的选择!但是仍然有很多隐式循环。哦,这也是一个很好的循环!但是仍然有很多隐式循环。在链接中,你可以看到他可能不想要php循环的原因:这比使用内部循环慢得多。在链接中,你可以看到他可能不想要php循环的原因:这比使用内部循环慢得多。