基本上,我有一个多维数组,我需要检查它是否只是空的。
我目前有一个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
以检查数组是否为空。
提前致谢!
答案 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);
然后你可以使用if(!empty($ result_array)){来检查它 }