Подтвердить что ты не робот

Как проверить, пустой ли многомерный массив или нет?

В принципе, у меня многомерный массив, и мне нужно проверить, просто ли он пуст или нет.

В настоящее время у меня есть оператор 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, чтобы проверить, пуст ли он или нет.

Спасибо заранее!

4b9b3361

Ответ 1

Итак, просто проверьте, присутствует ли первый ключ в массиве или нет.

Пример

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

Ответ 2

Вы можете фильтровать массив, по умолчанию это приведет к удалению всех пустых значений. Затем вы можете просто проверить, не пуст ли он:

$filtered = array_filter($csv_array);
if (!empty($filtered)) {
  // your code
}

Примечание. Это будет работать с кодом, опубликованным в вашем вопросе, если вы добавили другое измерение в один из массивов, который был пуст, это не будет:

$array = array(array()); // empty($filtered) = true;
$array = array(array(array())); // empty($filtered) = false;

Ответ 3

Если вы не знаете структуру многомерного массива

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

чтобы быть на стороне сохранения, вы хотите, чтобы он удалял пустые строки? или вы хотите вернуться, если какой-либо массив пуст? или вам нужен список, позиции которого пусты?

Это просто мысль и!!! не проверено!!!

/**
 * 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;
}

Ответ 5

Объедините 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));

Ответ 6

Почему бы просто не использовать 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();
}

Ответ 7

Вы можете использовать array_push, чтобы избежать этой ситуации,

$result_array = array();

array_push($result_array,$new_array);

отсылайте array_push

Затем вы можете проверить его, используя if (! empty ($ result_array)) { }