Ответ 1
Итак, просто проверьте, присутствует ли первый ключ в массиве или нет.
Пример
if(!empty($csv_array[1]))
{
//My code goes here if the array is not empty
}
В принципе, у меня многомерный массив, и мне нужно проверить, просто ли он пуст или нет.
В настоящее время у меня есть оператор 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
, чтобы проверить, пуст ли он или нет.
Спасибо заранее!
Итак, просто проверьте, присутствует ли первый ключ в массиве или нет.
Пример
if(!empty($csv_array[1]))
{
//My code goes here if the array is not empty
}
Вы можете фильтровать массив, по умолчанию это приведет к удалению всех пустых значений. Затем вы можете просто проверить, не пуст ли он:
$filtered = array_filter($csv_array);
if (!empty($filtered)) {
// your code
}
Примечание. Это будет работать с кодом, опубликованным в вашем вопросе, если вы добавили другое измерение в один из массивов, который был пуст, это не будет:
$array = array(array()); // empty($filtered) = true;
$array = array(array(array())); // empty($filtered) = false;
Если вы не знаете структуру многомерного массива
public function isEmpty(array $array): bool
{
$empty = true;
array_walk_recursive($array, function ($leaf) use (&$empty) {
if ($leaf === [] || $leaf === '') {
return;
}
$empty = false;
});
return $empty;
}
Просто имейте в виду, что все листовые узлы будут проанализированы.
чтобы быть на стороне сохранения, вы хотите, чтобы он удалял пустые строки? или вы хотите вернуться, если какой-либо массив пуст? или вам нужен список, позиции которого пусты?
Это просто мысль и!!! не проверено!!!
/**
* 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;
}
Объедините 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));
Почему бы просто не использовать 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();
}
Вы можете использовать array_push, чтобы избежать этой ситуации,
$result_array = array();
array_push($result_array,$new_array);
отсылайте array_push
Затем вы можете проверить его, используя if (! empty ($ result_array)) { }