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

How to see if an array of associative arrays is empty in php

我有一个相当简单的问题,我需要查看 php 中的数组关联数组是否为空。我的数组如下所示:

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

在我的例子中,三个人的三个数组什么都没有,所以我需要测试它是否为空。我已经完成了这个工作:

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

但我希望像下面这样使用 empty 更干净一些:

if (empty( $form_values )) {
  echo 'HI!';
}

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

$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
}

使用循环来测试每个嵌套数组。如果其中 none 个非空,则整个数组为空。

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

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

我对数组进行了简写,这样更容易阅读,因为数组是空的。 array() 效果相同。

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

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

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

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

输出:

bool(true)

来自 array_filter 的手册:

If no callback is supplied, all empty entries of array will be removed. See empty() for how PHP defines empty in this case.

请注意,如果某个项目被视为空的,如空字符串,它仍然 return 为真。这个测试可能不够严格。

更明确地说:

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

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

或搜索比较:

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

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

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