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)
如果你不知道多维数组的结构
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)
请记住,所有叶节点都将被解析。