在php中,是否有方法检查数组中的所有元素是否为空
在PHP中,是否有方法检查数组中的所有元素是否为null 例如,我有一个数组在php中,是否有方法检查数组中的所有元素是否为空,php,arrays,Php,Arrays,在PHP中,是否有方法检查数组中的所有元素是否为null 例如,我有一个数组数组(null,null,null,null)-有办法检查这个场景吗 我正在寻找一种更好的方法,而不仅仅是在整个数组中循环并检查每个元素。您可以使用 像这样: $nulls = array(null,null,null,null,null); if(count(array_filter($nulls)) == 0){ echo "all null (or false)"; } 不知道您在这个数组中期望得到什么,但这
数组(null,null,null,null)
-有办法检查这个场景吗
我正在寻找一种更好的方法,而不仅仅是在整个数组中循环并检查每个元素。您可以使用
像这样:
$nulls = array(null,null,null,null,null);
if(count(array_filter($nulls)) == 0){
echo "all null (or false)";
}
不知道您在这个数组中期望得到什么,但这会将false与null合并起来…您可以使用
像这样:
$nulls = array(null,null,null,null,null);
if(count(array_filter($nulls)) == 0){
echo "all null (or false)";
}
不知道您在这个数组中期望得到什么,但这会将false与null集在一起…另一种简单的方法是使用
max()
函数
max(array( 3, 4, null, null ) ) # is 4
max(array( null, null, null, null) # is null
因此,您可以发出一个简单的
if(is_null(max($array)){…}
调用。另一个简单的方法是使用max()
函数
max(array( 3, 4, null, null ) ) # is 4
max(array( null, null, null, null) # is null
因此,您可以发出一个简单的if(is_null(max($array)){…}
调用。可以工作:
function checkIsset($val) {
return isset($val);
}
$arr = array(null, null, null, ..., null);
$filteredArr = array_filter($arr, 'checkIsset');
if (count($filteredArr)) {
//not all null
} else {
//all null
}
或者if(empty($filteredar))
如果您想要相反的结果。可以:
function checkIsset($val) {
return isset($val);
}
$arr = array(null, null, null, ..., null);
$filteredArr = array_filter($arr, 'checkIsset');
if (count($filteredArr)) {
//not all null
} else {
//all null
}
或者if(empty($filteredar))
如果您想要相反的结果。尝试以下方法:
$nulls = array(null,null,null,null,null,null,null,null);
var_dump(array_unique($nulls) === array(null)); // prints true
试试这个:
$nulls = array(null,null,null,null,null,null,null,null);
var_dump(array_unique($nulls) === array(null)); // prints true
if($arr&&count(array\u filter($arr,'is\u null'))==count($arr)){
echo“数组均为空\n”;
}
只有当$arr
的所有元素都为空时,才会调用echo。如果($arr&&count(array\u filter($arr,'is\u null'))==count($arr)){
echo“数组均为空\n”;
}
只有当
$arr
的所有元素都为空时,才会调用echo。当然,使用foreach
循环它并测试每个元素。我的意思是使用更好的方法。就像在一些内置函数中一样,array\u unique($array)==array(null)
可能。编辑删除的引号如何在将数据插入数组之前检查数据是否为空?如果为空,则不会将其添加到数组中。如果数组没有内容,那么它就没有用处。使用array_unique()
的任何解决方案在最佳情况下都是O(n),而@halfer建议的简单循环(和中断)仅在最坏情况下才是O(n)。这意味着,如果您有一百万个项目,并且第二个项目不为空,那么使用array_unique()
您仍然会检查剩余的99998个项目(更不用说可能会占用大量内存),即使您已经有了答案。不要这样做。当然,用foreach
循环它并测试每个元素。我的意思是用更好的方法来做。就像在一些内置函数中一样,array\u unique($array)==array(null)
可能。编辑删除的引号如何在将数据插入数组之前检查数据是否为空?如果为空,则不会将其添加到数组中。如果数组没有内容,那么它就没有用处。使用array_unique()
的任何解决方案在最佳情况下都是O(n),而@halfer建议的简单循环(和中断)仅在最坏情况下才是O(n)。这意味着,如果您有一百万个项目,并且第二个项目不为空,那么使用array_unique()
您仍然会检查剩余的99998个项目(更不用说可能会占用大量内存),即使您已经有了答案。不要这样做。如果您使用array(0',null,array()),我想您的意思是count($removenulls)==0
代码>这将失败array\u filter
只是检查错误的值,而不是null
值。在我发表评论之前,我的答案是正确的,然后我注意到你的答案是相似的。@JKirchartz你考虑过测试一些尝试吗?我想你的意思是count($removenulls)==0
如果你使用array(0',null,array()代码>这将失败array\u filter
只是检查错误的值,而不是null
值。在我发表评论之前,我的答案是正确的,然后我注意到你的答案是相似的。@JKirchartz你考虑过测试一些尝试吗?@RepWhoringPeeHaa,没有。更多的是关于它如何工作的结构。你能提供工作代码或添加它是伪代码的事实吗?@RepWhoringPeeHaa,什么不工作?你试过了吗?我还没有试过(然后我也没有试着回答),但我想你会在isset
as callback上得到一个错误。@RepWhoringPeeHaa,我刚检查过,你是对的。修好了。@RepWhoringPeeHaa,没有。更多的是关于它如何工作的结构。你能提供工作代码或添加它是伪代码的事实吗?@RepWhoringPeeHaa,什么不工作?你试过了吗?我还没有试过(然后我也没有试着回答),但我想你会在isset
as callback上得到一个错误。@RepWhoringPeeHaa,我刚检查过,你是对的。修复了它。如果数组具有混合类型,则此操作不起作用:print max(['a',new StdClass(),null])
导致PHP可恢复致命错误:类StdClass的对象无法转换为字符串。如果数组具有混合类型,则此操作不起作用:print max(['a',new StdClass(),null])
导致PHP可恢复致命错误:类stdClass的对象无法转换为字符串
。