Eğer bir diziyi foreach döngüsüne sokar ve bu döngü içerisinde dizi değişkenlerinde değişiklik yapıp bunları foreach döngüsünün dışında kullanmaya çalışırsanız hayal kırıklığı yaşar, benim gibi şaşırır kalırsınız.
Örneğin aşağıdaki kodu çalıştırdığınızda çıktının “kayıt-ol/” olmasını beklerken, geriye “kayıt-ol” dönecektir. Halbuki foreach döngüsünün içerisinde
echo $p;
ile değişkeni okumak isterseniz “kayit-ol/” değişikliğinin yapıldığını göreceksiniz.
<?php $permalink_struct = array(); $permalink_struct['register'] = "kayit-ol"; $permalink_struct['logout'] = "cikis"; $permalink_struct['login'] = "giris"; foreach ($permalink_struct as $p) { $p .= '/'; } echo $permalink_struct['register']; // Sonuç "kayit-ol" olacaktır. ?>
Neden?
Burada nedeni yazıyor:
Note: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself.
PHP foreach döngülerine diziyi değil, dizinin bellekteki bir kopyasını sokarmış. Bu yüzden sizin foreach içinde yaptığınız değişiklikler dizinin kopyasında etkili oluyor ve siz foreach döngüsünden çıktıktan sonra (haliyle) orijinal diziye yansıtılmıyormuş.
Çözüm?
Dizinin orijinalini foreach döngüsüne sokmak için dizinin referansını (pointer) foreach’e parametre olarak vermeniz yeterli olacaktır. Bunu da dizi değişkeninin başına & (ampersand) operatörü koyarak sağlayabilirsiniz.
Kodun yeni hali aşağıdaki gibi olur ve çıktı olarak “kayıt-ol/” verir.
<?php $permalink_struct = array(); $permalink_struct['register'] = "kayit-ol"; $permalink_struct['logout'] = "cikis"; $permalink_struct['login'] = "giris"; foreach ($permalink_struct as &$p) { $p .= '/'; } // Sıradaki $permalink_struct verisinin ADRESİNİ $p'ye ata. echo $permalink_struct['register']; // Sonuç "kayit-ol/" olacaktır. ?>
Lorem Ipsum nedir?
Renk Körleri Web’i nasıl görüyor?
Seçim Adayımız: Medyum Ömer
Türkçede Dil Evrimi
Almanya’da nasıl ehliyet aldım?
Bir şirket neden uzaktan çalışmaya (remote working) izin verir?
-de -da eki ne zaman ayrı yazılır?
Almanya’ya gelmek için yapılan bürokratik işlemler