基本上,我有一个多维数组,我需要检查它是否为空。
我目前有一个
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
来检查数组是否为空。
提前致谢!
您可以过滤数组,默认情况下这将删除所有空值。然后你可以检查它是否为空:
$filtered = array_filter($csv_array);
if (!empty($filtered)) {
// your code
}
注意:这将适用于您问题中发布的代码,如果您向其中一个空数组添加另一个维度,则不会:
$array = array(array()); // empty($filtered) = true;
$array = array(array(array())); // empty($filtered) = false;
因此只需检查第一个键是否存在于数组中即可。
示例
if(!empty($csv_array[1]))
{
//My code goes here if the array is not empty
}
如果你不知道多维数组的结构
public function isEmpty(array $array): bool
{
$empty = true;
array_walk_recursive($array, function ($leaf) use (&$empty) {
if ($leaf === [] || $leaf === '') {
return;
}
$empty = false;
});
return $empty;
}
请记住,所有叶节点都将被解析。
组合
array_filter()
和 array_map()
即可得到结果。 ( 结果测试 )
<?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));
只是为了保存,您希望它删除空行吗?或者如果有任何数组为空,您想返回吗?或者您需要一个空位置列表吗?
这只是一个想法!未测试!!!
/**
* 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;
}
您可以使用全能递归函数来检查任何嵌套数组是否为真。
实现将如下所示:
function array_is_all_empty(array $array): bool
{
foreach ($array as $value) {
if (is_array($value) && !array_is_all_empty($value)) {
return false;
}
if (!is_array($value) && !empty($value)) {
return false;
}
}
return true;
}
如果嵌套数组完全为空,则返回 true。
可以使用array_push来避免这种情况,
$result_array = array();
array_push($result_array,$new_array);
然后你可以使用 if (!empty($result_array)) { 检查它 }