Destrukturyzacja tabel w PHP
Destrukturyzacja tablicy numerycznej
Do wartości wewnątrz tablicy numerycznej odwołujemy się podając nazwę tablicy oraz indeks pod którym znajduje się wartość. Kod może być długi, a przez to nieczytelny. Aby go uprościć możemy przypisac wartości z tablicy do zmiennych.
$profile = [‘Norbert’, 42, ‘UP’];
$name = $profile[0];
$age = $profile[1];
$uni = $profile[2];
echo “$name, $age, $uni”;
Instrukcja list()
Powyższy zapis możemy uprościć stosując instrukcję list().
$profile = [‘Norbert’, 42, ‘UP’];
// Instrukcja list()
list($name, $age, $uni) = $profile;
echo “$name, $age, $uni”;
Skróconyt zapis
Instrukcję list()
możemy zastąpić skróconym zapisem wykorzystując []
.
[$name, $age, $uni] = $profile;
echo “$name, $age, $uni”;
Pomijanie elementów
Możemy pominąć wybrane elementy i pobrać jedynie wymagane.
[, , $uni] = $profile
echo $uni;
Brakujące elementy
Jeżeli w tablicy źródłowej brakuje elementu do przypisania, zostanie wyświetlone ostrzeżenie (Notice)
;
$animals = [‘dog’, ‘cut’];
list($dog, $cut, $fogg) = $animals // Notice: Undefined offset 2 in…
UWAGA
Niezależnie od sposobu zapisu destrukturyzacja rozpoczyna się od elementu o indeksie 0
, nawet jeżeli takiego elementu nie ma.
$array = [
1 => ‘a’,
2 => ‘b’
];
[$a, $b] = $array; // Notice: Undefined offset 0 in…
echo $b; // ‘a’
Zostanie wyświetlone ostrzeżenie (Notice)
, a wartość w zmiennej może wydawać się błędna.
Tablice asocjacyjne
Destrukturyzację możemy zastosować również dla tablic asocjacyjnych non‐numerical keys
.
[‘uni’ => $uni, ‘name’ => $username] = $profile;
echo “$username, $uni”;
Kolejność jest dowolna. Można również pominąć dowolne elementy.
Zagnieżdżona destrukturyzacja
Destrukturyzacji możemy poddać również bardziej złożone tablice.
[
‘ford’ => [
‘models’ => $models
]
] = $cars;
print_r($models); // [0] => focus [1] => fiesta [2] => escort
Destrukturyzacja w pętli
$users = [
[‘name’ => ‘Norbert’, ‘age’ => 42, ‘uni’ => ‘UP’],
[‘name’ => ‘Aleksandra’, ‘age’ => 28, ‘uni’ => ‘UG’],
[‘name’ => ‘Jan’, ‘age’ => 5, ‘uni’ => ”],
];
foreach($users as [‘name’ => $name, ‘age’ => $age]) {
echo “$name, $age”;
}
Destrukturyzacja w praktyce
Jest wiele przypadków gdy destrukturyzcja będzie bardzo pomocna i wpłynie na podniesienie czytelności oraz skrócenie kodu.
[
‘basename’ => $file,
‘dirname’ => $directory,
] = pathinfo(‘/users/users.json’);
Funkcja pathinfo()
jako wynik swojego działania zwraca tablicę, którą od razu możemy poddać destrukturyzacji.
[
‘path’ => $path,
‘query’ => $query,
] = parse_url(‘http://abmstudio.pl/blog?cat=php’);
Podobnie funkcja parse_url
zwraca tablicę, którą możemy poddać destrukturyzacji.