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

Fiz*_*zix 21 php arrays multidimensional-array

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

我目前有一个if声明试图这样做:

if(!empty($csv_array)) 
{   
    //My code goes here if the array is not empty
}
Run Code Online (Sandbox Code Playgroud)

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

这是空数时的数组:

Array
(
    [0] => Array
        (
        )

)
Run Code Online (Sandbox Code Playgroud)

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

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
        )

)
Run Code Online (Sandbox Code Playgroud)

我的数组元素始终从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);
}
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

bil*_*can 34

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

$filtered = array_filter($csv_array);
if (!empty($filtered)) {
  // your code
}
Run Code Online (Sandbox Code Playgroud)

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

$array = array(array()); // empty($filtered) = true;
$array = array(array(array())); // empty($filtered) = false;
Run Code Online (Sandbox Code Playgroud)


Dip*_*mar 17

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

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


myo*_*yol 6

如果你不知道多维数组的结构

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

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

        $empty = false;
    });

    return $empty;
}
Run Code Online (Sandbox Code Playgroud)

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