2013-08-23 2 views
17

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

Я в настоящее время имею 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

Пробовал ли вы 'if (! Empty ($ csv_array [0]))'? – Bora

+0

@Bora, который никогда не получит выполнение ... потому что OP сказал, что индекс o всегда пуст ... –

+0

Если ваш файл имеет фиксированный формат, когда он пуст, вы можете найти размер, занимаемый пустым массивом, содержащим файл и использовать чтобы узнать, пуст ли ваш массив? Это просто метод взлома, такие методы - это то, что вы называете мышлением из окна;) Хотя для этого метода работы вам необходимо убедиться, что размер содержимого файла является постоянным, когда массив пустой. :) –

ответ

12

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

Пример

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

Определенно самый простой способ сделать это. Не могу поверить, что я не думал об этом ха-ха. Спасибо друг! – Fizzix

+0

@fizzix всегда приветствую чувака. –

+0

Что делать, если переменная не установлена? Что может вызвать уведомление об ошибке. – EkoJR

-1

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

$result_array = array(); 

array_push($result_array,$new_array);

см array_push

Затем вы можете проверить его с помощью I f (! empty ($ result_array)) { }

0

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

это просто мысль и !!! не испытано !!!

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

Вы можете фильтровать массив, по умолчанию это удалит все пустые значения.Тогда вы можете просто проверить, если он пуст:

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

Примечание: Это будет работать с кодом, публикуемую в вашем вопросе, если вы добавили еще одно измерение к одному из массивов, которая была пуста, она не будет:

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

Это лучший ответ, если вы не знаете, что такое ваши данные или какие индексы будут существовать. Благодарю. – IamFace

0

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

public function isEmpty(array $array): bool 
{ 
    $empty = true; 

    array_walk_recursive($array, function ($leaf) use (&$empty) { 
     if ($leaf === [] || $leaf === '') { 
      return; 
     } 

     $empty = false; 
    }); 

    return $empty; 
} 

Просто имейте в виду, все листовые узлы будут обрабатываться.

0

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