代码之家  ›  专栏  ›  技术社区  ›  ravenUSMC

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

  •  0
  • ravenUSMC  · 技术社区  · 4 年前

    我有一个相当简单的问题,我需要查看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!';
    }
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   Zack    4 年前

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

    由于数组是空的,所以我对数组进行了简写,这样更容易阅读。 array() 将工作相同。

    $form_values = [
      'person1' => [],
      'person2' => [],
      'person3' => []
    ];
    
    if (empty(array_filter($form_values))) {
        // empty
    } else {
        // not empty
    }
    
        2
  •  0
  •   MonkeyZeus    4 年前

    如果你正在寻找一个单行线,那么你可以这样做:

    $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
    }
    
        3
  •  0
  •   Barmar    4 年前

    使用一个循环来测试每个嵌套数组。如果它们都不是空的,则整个数组都是空的。

    $is_empty = true;
    foreach ($form_values as $val) {
        if (!empty($val)) {
            $is_empty = false;
            break;
        }
    }
    
        4
  •  0
  •   Progrock    4 年前
    <?php
    
    $data = 
    [
        'pig' => [],
        'hog' => [],
        'sow' => []
    ];
    
    $all_empty = array_filter($data) === [];
    var_dump($all_empty);
    

    输出:

    bool(true)
    

    根据array_filter手册:

    如果没有提供回调,数组的所有空条目都将 远离的。在这种情况下,PHP如何定义空,请参见empty()。

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

    更明确地说:

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

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

    或者搜索并比较:

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

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

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