如何检查多维数组是否为空?

时间:2013-08-23 11:22:08

标签: php arrays multidimensional-array

基本上,我有一个多维数组,我需要检查它是否只是空的。

我目前有一个if语句尝试执行此操作:

if(!empty($csv_array)) 
{   
    //My code goes here if the array is not empty
}

虽然,无论多维数组是否为空,都会激活if statement

这是空的时候数组的样子:

Array
(
    [0] => Array
        (
        )

)

当数组中包含一些元素时,这就是数组的样子:

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
            [1] => question1
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

    [2] => Array
        (
            [1] => question2
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

    [3] => Array
        (
            [1] => question3
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

)

我的数组元素始终从1开始,而不是0。长篇故事为什么,并且没有任何解释,因为它不是这个问题的主题。

如果需要,这是创建数组的代码。它是从上传的CSV文件中提取的。

$csv_array = array(array());
if (!empty($_FILES['upload_csv']['tmp_name'])) 
{
    $file = fopen($_FILES['upload_csv']['tmp_name'], 'r');
}

if($file)
{
    while (($line = fgetcsv($file)) !== FALSE) 
    {
        $csv_array[] = array_combine(range(1, count($line)), array_values($line));
    }

    fclose($file);
}

总而言之,我需要修改我的if statement以检查数组是否为空。

提前致谢!

7 个答案:

答案 0 :(得分:30)

您可以过滤数组,默认情况下会删除所有空值。然后你可以检查它是否为空:

$filtered = array_filter($csv_array);
if (!empty($filtered)) {
  // your code
}

注意:这将与您的问题中发布的代码一起使用,如果您向其中一个为空的数组添加了另一个维度,则不会:

$array = array(array()); // empty($filtered) = true;
$array = array(array(array())); // empty($filtered) = false;

答案 1 :(得分:15)

因此,只需检查数组中是否存在第一个键。

示例

if(!empty($csv_array[1])) 
{   
    //My code goes here if the array is not empty
}

答案 2 :(得分:1)

只是在保存方面,你想要它删除空行?或者如果任何数组为空,你想返回吗?或者你需要一个空位的清单?

这只是一个想法和!!!未经测试!!!

/**
 * multi array scan 
 * 
 * @param $array array
 * 
 * @return bool
 */
function scan_array($array = array()){
  if (empty($array)) return true;

  foreach ($array as $sarray) {
    if (empty($sarray)) return true;
  } 

  return false;
}

答案 3 :(得分:1)

如果您不了解多维数组的结构

public function isEmpty(array $array): bool
{
    $empty = true;

    array_walk_recursive($array, function ($leaf) use (&$empty) {
        if ($leaf === [] || $leaf === '') {
            return;
        }

        $empty = false;
    });

    return $empty;
}

请记住,将解析所有叶节点。

答案 4 :(得分:0)

合并array_filter()array_map()以获得结果。 ( Result Test

<?php
    $arrayData = [
        '0'=> [],
        '1'=> [
            'question1',
            'answer1',
            'answer2',
            'answer3',
            'answer4'
        ],
        '2'=> [
            'question1',
            'answer1',
            'answer2',
            'answer3',
            'answer4'
        ]
    ];

    $arrayEmpty = [
        '0' => [],
        '1' => [
            '1' => '',
            '2' => '',
            '3' => ''
        ]
    ];

    $resultData = array_filter(array_map('array_filter', $arrayData));
    $resultEmpty = array_filter(array_map('array_filter', $arrayEmpty));

    var_dump('Data', empty($resultData));
    var_dump('Empty', empty($resultEmpty));

答案 5 :(得分:-1)

为什么不使用count()

$example_arr = array();
$example_arr = array(
    array( 'foo', 'bar' )
);

if ( 0 < count( $example_arr ) ) {
    // !empty();
}

---或---

if ( 0 >= count( $example_arr ) ) {
    // empty();
}

问题解决方案

在这种情况下,您所要做的就是检查数组计数是否大于1.

if ( 1 < count( $example_arr ) ) {
    // !empty();
}

答案 6 :(得分:-2)

您可以使用array_push来避免这种情况,

$result_array = array();

array_push($result_array,$new_array);

参考array_push

然后你可以使用if(!empty($ result_array)){来检查它 }