Strony internetoweSklepy internetoweAktualizacja stron

Destrukturyzacja tabel w PHP

Destrukturyzacja może podnieś czytelności oraz pozwala uzyskać krótszy kod.

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.

Kontakt

Napisz do nas

Biuro czynne jest od poniedziałku do piątku w godzinach od 9.00 do 16.00.

Wygląda ok!
Proszę wprowadzić poprawny adres e-mail.
Wygląda ok!
Proszę wprowadzić poprawny numer telefonu.
Wygląda ok!
Proszę wprowadzić treść wiadomości.

* te pola są wymagane.

Adres

  • ABM Studio Norbert Morajda
  • ul. Kopernika 22,
  • 33-170 Tuchów

Dane do przelewów

  • ABM Studio Norbert Morajda
  • PL 8732577306
  • Santander Bank Polska
  • 10 1910 1048 2125 0787 8127 0001