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的最干净的方法相关推荐

  1. input、textarea等控件设置只读时,按退格键跳转至上级界面的解决方法

    参考:控件为只读时,禁用退格键 //禁止Backspace键 function forbidBackSpace(e) {        var ev = e || window.event; //获取 ...

  2. c语言初始化字符数组为空,怎么把已经初始化的字符数组设置为空?

    怎么把已经初始化的字符数组设置为空? 两种方法,如下所示. 方法一: 代码演示 #include #include int main(void) { char a[]={'x','y','z'}; / ...

  3. 怎么把已经初始化的字符数组设置为空?

    怎么把已经初始化的字符数组设置为空? 两种方法,如下所示. 方法一: 代码演示 #include <stdio.h> #include <string.h> int main( ...

  4. php 数组设置为空,PHP数组设置空值

    如果没有数据存在,如何将数组值设置为null?PHP数组设置空值 以下是我的PHP阵列和我JSON编码 - { "title":"Impalz-Marketing&quo ...

  5. 【Android 插件化】Hook 插件化框架 ( 合并 “插件包“ 与 “宿主“ 中的 Element[] dexElements | 设置合并后的 Element[] 数组 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  6. c判断char数组是否为空_你学过数组,那你知道柔性数组吗?

    1 引言 定长数组包 在平时的开发中,缓冲区数据收发时,如果采用缓冲区定长包,假定大小是 1k,MAX_LENGTH 为 1024.结构体如下: // 定长缓冲区struct max_buffer{ ...

  7. 创建包含N个空对象的数组

    在给对象设置属性时, 如果对象不存在很容易报错. 有些场景, 在对对象数组处理时, 设置对象属性前判断对象是否存在. 与其这样, 还不如直接初始化为空对象数组. 本文主要涉及到一些容易忽略的知识点: ...

  8. c语言如何判断数组不为空,PHP 判断数组是否为空的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在php中判断是否为数组很简单,php中利用is_array() 函数就可以快速判断变量是否为数组了.is_array - 检测变量是否是数组Report ...

  9. MyBatis中传递数组参数和List参数时if-test判空和判断长度的写法

    场景 前端传递一个部门id的数组作为查询条件查询部门id在这个数组中的数据. 在MyBatis的xml中获取到了这个数组参数后怎样进行if-test的判空与长度判断. 注: 博客: https://b ...

最新文章

  1. HDOJ 1914 The Stable Marriage Problem
  2. 大数据分析神兽麒麟(Apache Kylin)
  3. php无限分类原理,php 递归无限级分类原理和实现代码
  4. 502无法解析服务器标头_编写下载服务器。 第二部分:标头:Last-Modified,ETag和If-None-Match...
  5. php 中 date转换为字符串,PHP 时间与字符串的相互转化
  6. php vue seo,处理 Vue 单页面 SEO 的另一种思路
  7. 性能测试系列:高可用测试linux常用命令
  8. paip.html调试工具--显示控件名称与值
  9. C++轻量级Json解析工具—TinyJson
  10. 脑电数据预处理,eeglab预处理采集的SSVEP数据
  11. 弱电工程师和网络工程师有什么区别?工作内容是什么?
  12. 单位个人计算机 数据备份,个人所得税软件数据备份,您必须知道的5件事
  13. Docker设置端口映射
  14. 腾讯云网站域名备案帮助说明文档
  15. Asis CTF 2016 b00ks(堆溢出NULL byte off-by-one)
  16. 上亿会员 为b站会员购众筹项目打下消费基础
  17. easyExcel给表格的每一列设置不同样式
  18. new和delete的使用
  19. 论文查重的内容是哪些?
  20. Android studio成品 记账本(附带文档)

热门文章

  1. cesium中用Primitive方式画线段
  2. 第七章、模型详解 -- 多表查询
  3. [gdc16]《星球大战:前线》的美术制作技术
  4. HTML荧光文字特效,html – 在CSS中的笔荧光笔效果
  5. C++类和对象:友元内部类
  6. 计算机网络之CSMA/CD协议
  7. 双语播放器关键词研究
  8. 直播造星3年:除了冯提莫 你还记得几个出圈的网红?
  9. 六轴机械臂控制器 控制卡 软件 机械臂
  10. Linux系统时间同步方法