php中如何查看关联数组的数组是否为空

问题描述 投票:0回答:5

我有一个相当简单的问题,我需要查看 php 中数组的关联数组是否为空。我的数组看起来像这样:

array (
  'person1' => 
  array (
  ),
  'person2' => 
  array (
  ),
  'person3' => 
  array (
  ),
)

就我而言,三个人的三个数组没有任何内容,所以我需要测试它是否为空。我已经这样做了,有效:

    if ( empty($form_values['person1']) && empty($form_values['person2']) && empty($form_values['person3'] ) ){
        echo 'values empty!!';
    }

但我希望使用如下的空来更干净一些:

if (empty( $form_values )) {
  echo 'HI!';
}
php arrays associative-array is-empty
5个回答
2
投票

您可以使用

array_filter()
来过滤所有空数组元素。然后您可以使用
empty
检查结果是否为空。

我已经简化了数组,因此更容易阅读,因为数组是空的。

array()
效果相同。

$form_values = [
  'person1' => [],
  'person2' => [],
  'person3' => []
];

if (empty(array_filter($form_values))) {
    // empty
} else {
    // not empty
}

0
投票

如果您正在寻找单行代码,那么您可以这样做:

$form_values = array (
  'person1' => 
  array (
  ),
  'person2' => 
  array (
  ),
  'person3' => 
  array (
  ),
);

if(array_sum(array_map(function($v){return !empty($v);}, $form_values)) === 0)
{
    // empty
}
else
{
    // not empty
}

0
投票

使用循环来测试每个嵌套数组。如果没有一个非空,则整个数组为空。

$is_empty = true;
foreach ($form_values as $val) {
    if (!empty($val)) {
        $is_empty = false;
        break;
    }
}

0
投票
<?php

$data = 
[
    'pig' => [],
    'hog' => [],
    'sow' => []
];

$all_empty = array_filter($data) === [];
var_dump($all_empty);

输出:

bool(true)

来自 array_filter 的手册:

如果未提供回调,则数组的所有空条目都将被 已删除。请参阅empty() 了解 PHP 在这种情况下如何定义空。

请注意,如果某个项目被视为空(例如空字符串),它仍然会返回 true。这个测试可能不够严格。

更明确地说:

if (array_filter($data, function($v) {return $v !== []; }) === []) {}

过滤掉所有不是空数组的项目。如果所有项目都是空数组,那么我们剩下的就是一个空数组。

或搜索比较:

if (array_keys($data, []) == array_keys($data)) {}

检查属于包含空数组的项的键是否与数组的键匹配。或者更确切地说,所有项目(如果存在)都是空数组。

请注意,空数组也将满足上述三个解决方案。


0
投票

我想检查关联数组是否为空。尝试

$arr = array(
 'street' => null,
 'city' => '',
);
var_dump(empty(array_diff($arr, array(null))));
© www.soinside.com 2019 - 2024. All rights reserved.