[$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);.