Array destructuring
Array destructuring
Kiedyś pisałem dosyć dużo kodu w javascript (es6). Wykorzystywałem różne możliwość języka, których później brakowało mi w php. Jedną z nich było tzw. destructuring assignment.
Przykład w ES6
1
2
3
4
const user = [1, 'name'];
const [id, name] = user;
console.log(id); // 1
console.log(name); // name
W php 5.6 też dało się coś takiego zrobić, ale tylko z użyciem funkcji list(). Natomiast w 7.1 już to według mnie wygląda bardziej przyjemnie.
PHP 5.6
1
2
3
4
$user = [1, 'name'];
list($id, $name) = $user;
var_dump($id); // 1
var_dump($name); // name
PHP 7.1
1
2
3
4
$user = [1, 'name'];
[$id, $name] = $user;
var_dump($id); // 1
var_dump($name); // name
Pętle
1
2
3
4
$user = ['id' => 1, 'name' => 'user'];
['id' => $id, 'name' => $name] = $user;
var_dump($id); // 1
var_dump($name); // name
Teraz rozważmy trochę szerszy przykład. Załóżmy, że mamy taką tablicę z danymi użytkowników.
1
2
3
4
5
$users = [
['id' => 1, 'name' => 'user', 'email' => 'user@test.com'],
['id' => 2, 'name' => 'user2', 'email' => 'user2@test.com'],
['id' => 3, 'name' => 'user3', 'email' => 'user3@test.com']
];
Chcemy teraz przetworzyć w pętli nazwę i email użytkownika. Można to zrobić w następujący sposób.
1
2
3
4
5
6
7
8
9
$users = [
['id' => 1, 'name' => 'user', 'email' => 'user@test.com'],
['id' => 2, 'name' => 'user2', 'email' => 'user2@test.com'],
['id' => 3, 'name' => 'user3', 'email' => 'user3@test.com']
];
foreach ($users as ['name' => $name, 'email' => $email]) {
var_dump($name); // user, user2, user3
var_dump($email); // user@test.com, user2@test.com, user3@test.com
}
Zagnieżdżenia
Dodatkowo możliwe jest również wydobywanie zagnieżdżonych elementów.
1
2
3
4
5
6
7
8
9
10
11
12
$user = [
'id' => 1,
'name' => 2,
'address' => [
'city' => 'Krakow',
'street' => 'Wielicka'
]
];
['address' => ['city' => $city]] = $user;
var_dump($city); // Krakow
This post is licensed under CC BY 4.0 by the author.