Menu

list() i destrukturyzacja tablic w PHP: [$a, $b] = $arr

[$a, $b] = $array przypisuje dwa pierwsze elementy do $a i $b w jednej linii, a ['name' => $name] = $user robi to samo po kluczu. list() to starszy zapis. Strona opisuje pomijanie elementów, zamianę zmiennych, zwracanie wielu wartości, destrukturyzację w foreach i operator rozpakowania ....

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

[$a, $b] = $array; rozkłada elementy tablicy na osobne zmienne w jednej linii: $a dostaje $array[0], $b dostaje $array[1]. list($a, $b) = $array; to starszy zapis tego samego, a ['name' => $name] = $user; robi to po kluczu.

Połączenie destrukturyzacji z explode() to klasyczne zastosowanie: podziel string, nazwij kawałki, idź dalej.

Pomijanie elementów

Zostaw pozycję pustą, aby ją pominąć. Możesz też skończyć wcześniej: nieużyte elementy na końcu są ignorowane.

Destrukturyzacja tablicy asocjacyjnej po kluczu

Z kluczami kolejność w tablicy nie ma znaczenia i bierzesz tylko potrzebne pola. Klucz piszesz przed =>, a zmienną po nim.

Wzorce zagnieżdżają się tak samo dla list: [[$x1, $y1], [$x2, $y2]] = $line; odczytuje naraz dwa punkty. Od PHP 7.3 zmienna we wzorcu może też być referencją, [, &$second] = $counts;, więc zmiana $second zmienia tablicę.

Jedno przypisanie używa albo pozycji, albo kluczy, nigdy obu naraz. [$a, 'k' => $b] = $arr; kończy się błędem Cannot mix keyed and unkeyed array entries in assignments.

Zamiana wartości dwóch zmiennych

Zbuduj tablicę z dwóch wartości w odwrotnej kolejności i zdestrukturyzuj ją z powrotem. Zmienna tymczasowa nie jest potrzebna.

Zwracanie wielu wartości z funkcji

Funkcja w PHP zwraca jedną wartość, ale ta wartość może być tablicą. Destrukturyzacja w miejscu wywołania sprawia, że wygląda to jak kilka wartości zwracanych. Przy więcej niż dwóch lub trzech wartościach zwracaj klucze, żeby wywołujący nie pomylił kolejności.

Destrukturyzacja w foreach

Ta sama składnia działa w linii foreach, więc każdy wiersz przychodzi już rozłożony na nazwane zmienne. To właśnie ma się na myśli, mówiąc o „foreach z list()”. Więcej wzorców pętli znajdziesz na stronie o foreach.

Operator rozpakowania (...)

Trzy kropki rozpakowują tablicę w miejscu. W literale tablicy [...$a, ...$b] łączy tablice. W wywołaniu funkcji f(...$args) przekazuje elementy jako osobne argumenty. W definicji funkcji ...$args zbiera dodatkowe argumenty w tablicę.

Przed PHP 8.1 rozpakowanie tablicy z kluczami tekstowymi było błędem; teraz klucze tekstowe są zachowywane, a liczbowe numerowane od nowa, według tych samych zasad co w array_merge(). Parametry wariadyczne, takie jak ...$amounts, opisuje razem z innymi rodzajami parametrów strona o funkcjach.

Częsty błąd: mniej elementów niż zmiennych

Jeśli tablica jest krótsza niż wzorzec, brakujące zmienne stają się null, a PHP wypisuje ostrzeżenie dla każdej z nich. Zdarza się to przy danych, nad którymi nie masz kontroli, na przykład przy linii z brakującymi polami. Dla [$name, $city, $country] = explode(',', 'Grace'); PHP wypisuje:

Warning: Undefined array key 1 in /var/www/html/import.php on line 5

Warning: Undefined array key 2 in /var/www/html/import.php on line 5

Zdecyduj, czym ma być brakujący kawałek, i uzupełnij tablicę przed destrukturyzacją:

Dla wzorców z kluczami najpierw dołącz wartości domyślne: ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. Operator + dodaje tylko klucze, których $input jeszcze nie ma.

Najczęściej zadawane pytania

Co robi list() w PHP?

list($a, $b) = $array; przypisuje $array[0] do $a i $array[1] do $b. Od PHP 7.1 krótka forma [$a, $b] = $array; robi dokładnie to samo, a obie formy przyjmują klucze: ['id' => $id] = $row;.

Jak zamienić wartości dwóch zmiennych w PHP?

Zdestrukturyzuj nową tablicę zbudowaną z nich w odwrotnej kolejności: [$a, $b] = [$b, $a];. Zmienna tymczasowa nie jest potrzebna.

Czy można użyć list() z tablicą asocjacyjną w PHP?

Tak, od PHP 7.1. Podaj klucze: ['name' => $name, 'email' => $email] = $user; albo list('name' => $name) = $user;. Bez kluczy [$a, $b] = $user; szuka kluczy 0 i 1 i dostaje null z ostrzeżeniem.

Czym są trzy kropki (...) w PHP?

Operatorem rozpakowania (spread). W literale tablicy [...$a, ...$b] kopiuje elementy obu tablic do nowej. W wywołaniu max(...$numbers) przekazuje elementy jako osobne argumenty. W definicji funkcji function sum(...$numbers) zbiera dowolną liczbę argumentów w tablicę.

Co się dzieje, gdy tablica ma mniej elementów niż zmiennych w list()?

Nadmiarowe zmienne dostają null, a PHP wypisuje ostrzeżenie, na przykład Undefined array key 2. Najpierw uzupełnij tablicę, na przykład [$a, $b, $c] = array_pad($parts, 3, null);.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ