【问题标题】:How to check an associative array for all null values in php?如何检查 php 中所有空值的关联数组?
【发布时间】:2014-03-12 14:26:08
【问题描述】:

这可能是一个非常琐碎的问题,但请多多包涵。

我正在尝试将大量数据读入关联数组的数组中。数据包含许多空数组和设置了键但所有值为空的数组。我想忽略这些,只推送至少一个键映射到非空值的数组。 (数据来自一个 excel 表,它有很多空单元格,无论如何都注册为“set”。)到目前为止,我已经尝试过:

如果(!empty(${$small_dummy}))
array_push(${$big_dummy}, ${$small_dummy});

这消除了空数组,但不是所有键都映射为空的数组。有没有比遍历整个数组并弹出所有空值更好的方法?

【问题讨论】:

  • 如果您将其转换为 .csv 文件,我想您可能会有更多的运气。

标签: php arrays excel


【解决方案1】:

从你已有的代码来看,你可以改变:

if(!empty(${$small_dummy}))

到:

if(!empty(array_filter(${$small_dummy})))

这将过滤掉所有空值(准确地说是评估为FALSE 的值)并检查结果数组是否为空。另请参阅array_filter() 上的手册。

请注意,这也会过滤 0 值,因此您可能需要为 array_filter() 编写自定义回调函数。

【讨论】:

  • 谢谢!唯一的问题是,根据解析器,array_filter 不会“返回到写入上下文”,所以我必须让它返回一个变量并让 if 语句评估它
【解决方案2】:

你也可以试试 if(!array_filter($array)) { 也

【讨论】:

    【解决方案3】:

    这不是一个理想的方法,但如果所有值都不能转换为数值,array_sum 将返回 0。所以:

    $small_dummy = array("a" => null, "foo", "", 0); 
    
    if(array_sum($small_dummy) === 0) 
    

    会通过的。但只有当您期望值是数字时,这才是唯一可行的方法。

    实际上,如果问题是数组键有值,因此没有以empty() 的形式传递,则使用array_values

    if(!empty(array_values(${$small_dummy})))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2023-03-27
      • 2013-11-28
      相关资源
      最近更新 更多