如果数组为空则跳过foreach的最简洁方法[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果数组为空则跳过foreach的最简洁方法[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

这不是一个主要问题,但我想知道是否有更清洁的方法来做到这一点。最好避免使用不必要的if语句嵌套我的代码。如果$items为空,则php会抛出错误。

$items = array('a','b','c');

if(!empty($items)) { // <-Remove this if statement
  foreach($items as $item) {
    print $item;
  }
}

我可能只是使用'@'错误抑制器,但这有点hacky。

答案

有一百万种方法可以做到这一点。

假设你有一个数组,那么第一个就是继续运行数组通过foreach。

在其他情况下,这是您可能需要的:

foreach ((array) $items as $item) {
    print $item;
}

注意:对于所有抱怨类型转换的人,请注意OP如果数组为空,则要求最简洁的方法跳过foreach(重点是我的)。值true,false,数字或字符串不被视为空。另外,这适用于实现Traversable的对象,而is_array不起作用。

另一答案

最佳做法是将变量定义为代码顶部的数组。

foreach((array)$ myArr as $ oneItem){..}

也可以工作,但每次需要循环遍历数组时,您将复制此(数组)转换。

因为重要的是不要复制代码中的一个单词,所以最好将它定义为顶部的空数组。

另一答案

您可以检查$ items是否实际上是一个数组,以及它是否包含任何项:

if(is_array($items) && count($items) > 0)
{
    foreach($items as $item) { }
}
另一答案
$items = array('a','b','c');

if(is_array($items)) {
  foreach($items as $item) {
    print $item;
  }
}
另一答案

最好的方法是在使用前初始化每个血腥变量。 它不仅可以解决这个愚蠢的“问题”,还可以为您节省大量的麻烦。

因此,引入$ items作为$items = array();是你真正想要的。

另一答案

我不建议抑制警告输出。但是,我会建议使用is_array而不是!empty。如果$items恰好是非零标量,那么如果使用foreach!empty仍会出错。

另一答案

如果您需要的变量可能是boolean false - 例如。当没有从数据库或array返回记录时 - 返回记录时,您可以执行以下操作:

foreach (($result ? $result : array()) as $item)
    echo $item;

使用强制转换((Array)$result)的方法产生一个计数1的数组,当变量是boolean false时,这不是你想要的。

另一答案

我认为这里最好的方法是规划你的代码,以便$ items总是一个数组。最简单的解决方案是使用$ items = array()在代码顶部初始化它。这样,即使您没有为其分配任何值,它也将表示空数组。

所有其他解决方案对我来说都非常糟糕。

另一答案
foreach((array)$items as $item) {}
另一答案

我的“标准库”中有以下功能

/// 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
另一答案

三元逻辑将其降低到一行,没有错误。这解决了不正确地转换变量和未定义变量的问题。

foreach (is_array($Items) || is_object($Items) ? $Items : array()  as $Item) {

写作有点痛苦,但却是最安全的处理方式。

以上是关于如果数组为空则跳过foreach的最简洁方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果对象为空,则跳过 for 循环

如果变量的值为空,则跳过变量的序列化? (自定义序列化)

ORACLE查询条件为空,则跳过该条件。

如果 wget 中已经存在文件,则跳过下载?

检查PHP数组是不是不为空的最简单方法[关闭]

Js中去除数组中重复元素的几种方法