(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()?
(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()?
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();
}
http://www.php.net/manual/en/language.types.array.php#language.types.array.casting –
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. –
$var = array();
opróżni tablicę. Czy tego właśnie szukasz?
$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ąć?)
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
@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? –
tak :) Nienawidzę robić kontroli dla każdej małej rzeczy, ale myślę, że nie mam wyboru tutaj .. – Alex
Spróbuj unset($someemptyvariablethatisnotarray[0])
:)
if(!$variable){
return array();
}
Kiedy rzucisz non-tablicę jako tablicę, tworzy tablicę z tej zmiennej jako jedynej wartości.
Jeśli chcesz pustą tablicę, musisz zwrócić array()
.
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!
wystarczy użyć count()
, na przykład: if(count($array) == 0){ // empty array }
Podczas korzystania 'var_dump()' zamiast 'print_r()' to pokazuje również typ wartości w tablicy! – powtac