概述
php - 如果数组为空,跳过foreach的最干净的方法
这个问题在这里已有答案:
为foreach()提供的参数无效 19个答案
这不是一个主要问题,但我想知道是否有更清洁的方法来做到这一点。 最好避免使用不必要的if语句嵌套我的代码。 如果$items为空,则php会抛出错误。
$items = array('a','b','c');
if(!empty($items)) { //
foreach($items as $item) {
print $item;
}
}
我可能只是使用'@'错误抑制器,但这有点hacky。
Keyo asked 2019-07-16T10:24:01Z
11个解决方案
180 votes
有一百万种方法可以做到这一点。
假设你有一个数组,那么第一个就是继续运行数组通过foreach。
在其他情况下,这是您可能需要的:
foreach ((array) $items as $item) {
print $item;
}
注意:对于所有抱怨类型转换的人,请注意OP如果数组为空,则要求最简洁的方法跳过foreach(重点是我的)。 值true,false,数字或字符串不被视为空。此外,这适用于实现Traversable的对象,而is_array不起作用。
Christian answered 2019-07-16T10:24:38Z
26 votes
$items = array('a','b','c');
if(is_array($items)) {
foreach($items as $item) {
print $item;
}
}
Matt Williamson answered 2019-07-16T10:24:56Z
24 votes
最好的方法是在使用前初始化每个血腥变量。
它不仅可以解决这个愚蠢的“问题”,还可以为您节省大量的麻烦。
因此,介绍$ item为$items = array();是您真正想要的。
Your Common Sense answered 2019-07-16T10:25:35Z
15 votes
我不建议抑制警告输出。 但是,我建议使用is_array而不是!empty。如果$items恰好是非零标量,那么如果使用!empty,则foreach仍会出错。
Zach Rattner answered 2019-07-16T10:26:02Z
9 votes
如果您需要的变量可以是(Array)$result - 例如。 当没有从数据库或boolean false返回记录时 - 返回记录时,您可以执行以下操作:
foreach (($result ? $result : array()) as $item)
echo $item;
当变量为boolean false时,使用强制转换((Array)$result)生成一个计数数组1,这不是您可能想要的。
Daniel Kmak answered 2019-07-16T10:26:35Z
6 votes
我认为这里最好的方法是规划你的代码,以便$ items总是一个数组。 最简单的解决方案是使用$ items = array()在代码顶部初始化它。 这样,即使您没有为其分配任何值,它也将表示空数组。
所有其他解决方案对我来说都非常糟糕。
Vladislav Rastrusny answered 2019-07-16T10:27:09Z
4 votes
foreach((array)$items as $item) {}
Milan answered 2019-07-16T10:27:28Z
3 votes
我的“标准库”中有以下功能
/// Convert argument to an array.
function a($a = null) {
if(is_null($a))
return array();
if(is_array($a))
return $a;
if(is_object($a))
return (array) $a;
return $_ = func_get_args();
}
基本上,这对数组/对象没有任何作用,并将其他类型转换为数组。 这与foreach语句和数组函数一起使用非常方便
foreach(a($whatever) as $item)....
$foo = array_map(a($array_or_string)....
etc
user187291 answered 2019-07-16T10:28:01Z
1 votes
三元逻辑将其降低到一行,没有错误。 这解决了不正确地转换变量和未定义变量的问题。
foreach (is_array($Items) || is_object($Items) ? $Items : array() as $Item) {
写作有点痛苦,但却是最安全的处理方式。
swirt answered 2019-07-16T10:28:34Z
0 votes
最佳做法是将变量定义为代码顶部的数组。
foreach((array)$ myArr as $ oneItem){..}
也可以工作,但每次需要循环遍历数组时,您将复制此(数组)转换。
因为重要的是不要复制代码中的一个单词,所以最好将它定义为顶部的空数组。
spetsnaz answered 2019-07-16T10:29:21Z
0 votes
您可以检查$ items是否实际上是一个数组,以及它是否包含任何项:
if(is_array($items) && count($items) > 0)
{
foreach($items as $item) { }
}
shasi kanth answered 2019-07-16T10:29:47Z
最后
以上就是雪白睫毛膏为你收集整理的php 数组设置为空,php - 如果数组为空,跳过foreach的最干净的方法的全部内容,希望文章能够帮你解决php 数组设置为空,php - 如果数组为空,跳过foreach的最干净的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复