2013-08-23 5 views
17

Zasadniczo mam wielowymiarową tablicę i muszę sprawdzić, czy jest ona po prostu pusta, czy też nie.Jak sprawdzić, czy tablica wielowymiarowa jest pusta, czy nie?

obecnie mam if oświadczenie próbuje zrobić to z:

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

Mimo, że if statement jest aktywna, czy wielowymiarowa tablica jest pusta lub nie.

To właśnie tablica wygląda po opróżnieniu:

Array 
(
    [0] => Array 
     (
     ) 

) 

To właśnie tablica wygląda, gdy ma się kilka elementów w tym:

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 
     ) 

) 

Moi elementów tablicy zawsze zaczynają się 1, a nie 0. Długa historia, dlaczego, i nie ma sensu wyjaśniać, ponieważ nie ma tematu na to pytanie.

W razie potrzeby jest to kod, który tworzy tablicę. Jest pobierany z przesłanego pliku 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); 
} 

Tak na zakończenie, muszę zmodyfikować moje if statement, by sprawdzić, czy tablica jest pusta lub nie.

Z góry dziękuję!

+0

Czy wypróbowałeś 'if (! Empty ($ csv_array [0]))'? – Bora

+0

@Bora, która nigdy nie zostanie wykonana ... ponieważ OP powiedział, że jej indeks zawsze jest pusty ... –

+0

Jeśli twój plik ma stały format, gdy jest pusty, możesz znaleźć rozmiar zajmowany przez pustą tablicę zawierającą plik i użycie czy wiesz, czy twoja tablica jest pusta? To jest po prostu metoda "hack-y", takie metody można nazwać "myśleniem bez pudełka";) Mimo że ta metoda działa, należy upewnić się, że rozmiar zawartości pliku jest stały zawsze, gdy tablica jest pusty. :) –

Odpowiedz

12

Po prostu sprawdź, czy pierwszy klucz jest obecny w tablicy, czy nie.

Przykład

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

Zdecydowanie najprostszy sposób na zrobienie tego. Nie mogę uwierzyć, że nie myślałem o tym haha. Dzięki stary! – Fizzix

+0

@fizzix zawsze mile widziane koleś. –

+0

Co się stanie, jeśli zmienna nie zostanie ustawiona? Które mogłyby rzucić komunikat o błędzie. – EkoJR

-1

Można użyć array_push aby uniknąć tej sytuacji,

$result_array = array(); 

array_push($result_array,$new_array);

odnoszą array_push

Następnie można to sprawdzić za pomocą I f (! pusty ($ result_array)) { }

0

Po prostu po stronie save chcesz usunąć puste linie? czy chcesz powrócić, jeśli jakaś tablica jest pusta? czy potrzebujesz listy, które pozycje są puste?

to tylko myśl i !!! nie testowany !!!

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

Możesz filtrować tablicę, domyślnie usunie wszystkie puste wartości.Następnie można po prostu sprawdzić, czy jest ona pusta:

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

Uwaga: To będzie pracować z kodem pisał w swoim pytaniu, jeśli dodaje kolejny wymiar do jednej z tablic, która była pusta, nie byłoby:

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

To jest lepsza odpowiedź, jeśli nie wiesz, jakie są twoje dane lub jakie indeksy będą istnieć. Dzięki. – IamFace

0

Jeśli nie znają struktury wielowymiarowej tablicy

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

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

     $empty = false; 
    }); 

    return $empty; 
} 

Wystarczy pamiętać wszystkie węzły liść będzie analizowany.

0

Dlaczego po prostu nie używać count()?

$example_arr = array(); 
$example_arr = array(
    array('foo', 'bar') 
); 

if (0 < count($example_arr)) { 
    // !empty(); 
} 

--- LUB ---

if (0 >= count($example_arr)) { 
    // empty(); 
} 

Rozwiązanie na pytanie

W tym przypadku, wszystko co musisz zrobić, to sprawdzić, czy licznik tablica jest większa niż 1.

if (1 < count($example_arr)) { 
    // !empty(); 
}