2011-03-24 14 views
12

(array)$someemptyvariablethatisnotarray powraca array([0] =>) zamiast array()PHP - pusta tablica

Jak mogę to zrobić tak dostaję pustą tablicę, która nie iteruje gdy używam go wewnątrz foreach()?

+3

Podczas korzystania 'var_dump()' zamiast 'print_r()' to pokazuje również typ wartości w tablicy! – powtac

Odpowiedz

18

Funkcja który używasz, jest nazywany „casting”. Oznacza to, że zmienna jest zmuszona stać się danym typem, w twoim przykładzie tablicą. Sposób konwersji var nie zawsze jest oczywisty w PHP!

W twoim przykładzie $ someemptyvariablethatisnotarray staje się tablicą z jednym wpisem o wartości NULL.

The PHP documentation mówi:

Zachowanie automatycznej konwersji do tablicy jest obecnie niezdefiniowane.

Aby rozwiązać swój kod Polecam coś takiego:

if (!is_array($someemptyvariablethatisnotarray) { 
    $someemptyvariablethatisnotarray = array(); 
} 
+1

http://www.php.net/manual/en/language.types.array.php#language.types.array.casting –

+2

Jeśli odrzucisz NULL jako tablicę, stanie się pustą tablicą, jeśli rzucasz wartość skalarną (nawet pusty łańcuch, ponieważ nie jest to NULL), staje się tablicą o tej wartości, a nie wartości NULL. –

24
$var = array(); 

opróżni tablicę. Czy tego właśnie szukasz?

3
$somevar = empty($somevar) ? array() : (array)$somevar; 

Może? Chociaż nie jestem pewien, czy dostanę obsadę, czy cel. Pielęgnacja na ellaborate nieco więcej (może przykład tego, co próbujesz osiągnąć?)

+0

Używam go jak 'foreach ((tablica) $ coś jak $ k) ...'. Czasami $ coś może być "fałszywe", a nie tablica, więc nie chcę, żeby foreach to było. – Alex

+0

@Alexandra: Wiem, że PHP jest elastyczne, ale jeśli odkrywasz, że twoje zmienne zmieniają twoje typy danych, powinieneś gdzie indziej, aby to złapać (innymi słowy nie polegajcie na obsadzie). Zamierzam przeskoczyć pistolet i założyć, że jest to baza danych oraz wiersz pobierania, który może potencjalnie zwrócić FAŁSZ, co powstrzymałoby cię od iteracji nad elementami, prawda? –

+0

tak :) Nienawidzę robić kontroli dla każdej małej rzeczy, ale myślę, że nie mam wyboru tutaj .. – Alex

3

Spróbuj unset($someemptyvariablethatisnotarray[0]) :)

2

Kiedy rzucisz non-tablicę jako tablicę, tworzy tablicę z tej zmiennej jako jedynej wartości.

Jeśli chcesz pustą tablicę, musisz zwrócić array().

3

jak się masz?

Wierzę, że to jest to, co jesteś po:

$something = false; 
foreach((array)(empty($something) ? null : $something) as $k){ 
    echo 'never enters here'; 
} 

Nie dostaniesz pustą tablicę, ponieważ po ustawieniu „(array) false”, oznacza to będziesz miał pojedynczy element, a element ten będzie miał przypisaną wartość "FALSE".

To samo dzieje się z pustym ciągiem (nie null jednej!) (array) $ emptystring zwróci tablicę, która zawiera pojedynczy element, który jest ciąg pusty!

Podobnie robi:

array(''); 

Nadzieję, że to pomaga.

Pozdrawiam!

0

wystarczy użyć count(), na przykład: if(count($array) == 0){ // empty array }