Bunun Burada Ne İşi Var?
Dün şehre inmek için Sayın Menderes Türel’in zamanında Hafif Metro ...
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.
1 2 3 4 5 6 7 8 9 10 | <?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. ?> |
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ş.
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.
1 2 3 4 5 6 7 8 9 10 11 | <?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. ?> |
Twitler yükleniyor... 5 saniye sonra
Bıdı bıdı bıdı bıdı dıdı dıdı dudu dudu hıdı hıdı hödü hödü yüklüyoruz öhüm öhüm bıdı bıdı vs vs... 6 nanosaniye önce
Yüklenmenin geç olmasının sebebi ben değilim, Twitter API'sinin yavaş olması. Gudu gudu hıdı hödö büdü büdü... 25697 asır önce
Ha tabi bunları okumuşsan, bu sitenin çok gizli bir özelliğini bulmuşsun demektir. ;) Tebrikler. Bu "sürpiz yumurta"yı bulduğunu bana da haber verir misin? Tıkla! 6 dinazor önce
Yeni yazıları takip etmenin
bir sürü yolu var!