[$a, $b] = $array; bir dizinin elemanlarını tek satırda ayrı değişkenlere ayırır: $a $array[0], $b $array[1] değerini alır. list($a, $b) = $array; aynı şeyin eski yazımıdır ve ['name' => $name] = $user; bunu anahtara göre yapar.
Ayrıştırmayı explode() ile birlikte kullanmak klasik kullanımdır: bir dizgeyi bölün, parçaları adlandırın, devam edin.
Elemanları atlama
Bir konumu atlamak için boş bırakın. Erken de durabilirsiniz: sondaki kullanılmayan elemanlar yok sayılır.
İlişkisel bir diziyi anahtara göre ayrıştırma
Anahtarlarla dizideki sıra önemli değildir ve yalnızca ihtiyacınız olan alanları alırsınız. Anahtar => öncesine, değişken sonrasına yazılır.
Kalıplar listeler için de aynı şekilde iç içe geçer: [[$x1, $y1], [$x2, $y2]] = $line; iki noktayı aynı anda okur. PHP 7.3'ten beri bir kalıptaki değişken referans da olabilir, [, &$second] = $counts;, yani $second değişince dizi de değişir.
Bir atama ya konumları ya anahtarları kullanır, asla ikisini birden. [$a, 'k' => $b] = $arr; Cannot mix keyed and unkeyed array entries in assignments ile durur.
İki değişkenin yerini değiştirme
İki değerden ters sırada bir dizi oluşturun ve onu geri ayrıştırın. Geçici değişken gerekmez.
Bir fonksiyondan birden çok değer döndürme
Bir PHP fonksiyonu tek bir değer döndürür, ama bu değer bir dizi olabilir. Çağrı yerinde ayrıştırmak onu birkaç dönüş değeri gibi okutur. İki üç değerden fazlası için anahtarlar döndürün ki çağıran sırayı karıştıramasın.
foreach içinde ayrıştırma
Aynı söz dizimi foreach satırında da çalışır, böylece her satır zaten adlandırılmış değişkenlere ayrılmış olarak gelir. "list() ile foreach" denildiğinde kastedilen budur. Daha fazla döngü kalıbı foreach sayfasında.
Açma operatörü (...)
Üç nokta bir diziyi yerinde açar. Bir dizi değişmezinde [...$a, ...$b] dizileri birleştirir. Bir fonksiyon çağrısında f(...$args) elemanları ayrı argümanlar olarak verir. Bir fonksiyon tanımında ...$args fazla argümanları bir dizide toplar.
PHP 8.1'den önce dizge anahtarlı bir diziyi açmak hataydı; artık array_merge() ile aynı kurallarla dizge anahtarlar korunur ve sayısal anahtarlar yeniden numaralanır. ...$amounts gibi değişken sayıda parametreler diğer parametre türleriyle birlikte fonksiyonlar sayfasında anlatılıyor.
Sık yapılan hata: değişkenlerden az eleman
Dizi kalıptan kısaysa eksik değişkenler null olur ve PHP her biri için bir uyarı yazdırır. Bu, eksik alanları olan bir satır gibi kontrol etmediğiniz girdilerde olur. [$name, $city, $country] = explode(',', 'Grace'); için PHP şunu yazdırır:
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
Eksik bir parçanın ne olması gerektiğine karar verin ve ayrıştırmadan önce diziyi doldurun:
Anahtarlı kalıplar için önce varsayılanları birleştirin: ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. + operatörü yalnızca $input içinde olmayan anahtarları ekler.
Sıkça Sorulan Sorular
PHP'de list() ne işe yarar?
list($a, $b) = $array; $array[0] değerini $a değişkenine, $array[1] değerini $b değişkenine atar. PHP 7.1'den beri kısa biçim [$a, $b] = $array; tam olarak aynısını yapar ve iki biçim de anahtar kabul eder: ['id' => $id] = $row;.
PHP'de iki değişkenin yerini nasıl değiştiririm?
Onlardan ters sırada oluşturulmuş yeni bir diziyi ayrıştırın: [$a, $b] = [$b, $a];. Geçici bir değişken gerekmez.
PHP'de list() ilişkisel bir diziyle kullanılabilir mi?
Evet, PHP 7.1'den beri. Anahtarları adlandırın: ['name' => $name, 'email' => $email] = $user; veya list('name' => $name) = $user;. Anahtarlar olmadan [$a, $b] = $user; 0 ve 1 anahtarlarını arar ve bir uyarıyla null alır.
PHP'de üç nokta (...) nedir?
Açma (spread) operatörü. Bir dizi değişmezinde [...$a, ...$b] iki dizinin elemanlarını yeni bir diziye kopyalar. Bir çağrıda max(...$numbers) elemanları ayrı argümanlar olarak verir. Bir fonksiyon tanımında function sum(...$numbers) istenen sayıda argümanı bir dizide toplar.
Dizide list() içindeki değişkenlerden az eleman varsa ne olur?
Fazla değişkenler null alır ve PHP Undefined array key 2 gibi bir uyarı yazdırır. Diziyi önce doldurun, örneğin [$a, $b, $c] = array_pad($parts, 3, null);.