PHP’nin array_map fonksiyonu
PHP'nin dizi (array) işlemleri için çok güzel ve pratik fonksiyonları var. Bunlardan bir tanesi de array_map() isimli fonksiyon. Kısaca görevi, bir dizi içerisinde bulunan bütün değerleri tek tek başka bir fonksiyon ile işlemektir. array_map() fonksiyonu ilk başta bana da etkileyici gelmemişti ama kullanmaya başladıkça ne kadar etkili olduğunu farkettim.
array_map fonksiyonu nasıl işliyor?
Çok basit bir örnek ile bu fonksiyonun görevini anlatmak istiyorum. Örneğin elimizde ülkemizin en büyük 3 şehrinin ismini tutan bir dizi var. Ve biz, bu dizi içerisindeki şehir isimlerini BÜYÜK harflere dönüştüreceğiz. İlk önce array_map() kullanmadan bu işlemi yapmaya çalışalım:
-
<?php
-
-
foreach( $sehirler as $key=>$val )
-
{
-
}
-
?>
Yukarıdaki kod çalıştırıldığında dizi içerisindeki şehir isimleri BÜYÜK harflere dönüşmüş olacaktır. Sonucu da alttaki resimdeki gibi olacaktır:

Şimdi de aynı işlemi array_map() ile aslında ne kadar kolay yapabileceğimizi görelim:
Gördüğünüz gibi tek satırda ve döngü bile açmadan aynı işlemi daha pratik bir şekilde yapmış olduk. Burada array_map() fonksiyonuna ilk önce dizi içerisindeki değerlerin tabi tutulmasını istediğimiz fonksiyon ismini, daha sonra da dizinin kendisini yazıyoruz.
array_map() fonksiyonunu $_POST ve $_GET gibi süper global değişkenleriyle de kullanabilirsiniz. Ne de olsa bunlar da aslında birer dizi (array) tipindedir. Örnek için bir formdan POST yöntemiyle gönderilen verileri HTML etiketlerinden temizleyen bir kod yazalım. İlk önce bu işlemi array_map() fonksiyonu kullanmadan yapalım:
-
<?php
-
foreach ($_POST as $key=>$val)
-
{
-
}
-
?>

Yukarıda yazdığımız kod çok klasik bir yöntem. Bunu pekçok programlama forumunda da görebilirsiniz. Oysaki array_map() fonksiyonu ile bu işlemi tek satırda yapabiliriz.
-
<?php
-
?>
Çok boyutlu dizilerde array_map problemi ve çözümü
Şimdi de gelelim bu yazıyı yazmama neden olan soruna... array_map() fonksiyonu iyi güzel fakat sadece tek boyutlu dizilerle birlikte çalışıyor. Çok boyutlu dizilerle birlikte kullanmak istediğinizde ise hata veriyor. Şimdi yazının başındaki "şehirler" örneğine geri dönelim. İlk önce şehirleri bölge bölge ayırarak çok boyutlu bir dizi oluşturalım:
Yapacağımız iş yine aynı olsun... Yani dizi içerisindeki bütün değerleri BÜYÜK harflere çevirmeyi deneyelim.
-
<?php
-
?>
İşte bu kodu çalıştırdığımızda "Array to string conversion" hatası alıyoruz. Çünkü array_map() fonksiyonu bu örnekteki gibi içiçe geçmiş olan, yani çok boyutlu dizilerde problem çıkartıyor. Bu problemi gidermek için ben şöyle bir fonksiyon kullanıyorum:
array_map_multi() ismini verdiğim bu fonksiyon rekürsif bir yapıda çalışmaktadır. Çünkü eğer kendisine gelen değerin tipi bir dizi (array) ise kendisini yeniden çağırıyor. Bu fonksiyonun kullanımı array_map() fonksiyonu ile aynı...
-
<?php
-
$sehirler = array_map_multi('strtoupper', $sehirler);
-
?>
Ve böylelikle array_map() fonksiyonunu hem tek boyutlu hem de çok boyutlu dizilerle birlikte problemsiz bir şekilde kullanmış oluyoruz.

Yorum takibi
Geri izleme
Yazıyı Paylaş
29 Aralık 2007, 14:12
Programlama
Bugün 2 kez, toplam 1,641 kez okundu.
array, array map, array map multi, dizi, php

29 Aralık 2007, 14:57
Bu sitede web ile ilgili harika çözümler buluyorum. Keşke daha sık güncellenebilseydi.
29 Aralık 2007, 18:30
burhan usta çok güzel anlatmışsın, daha önce hiç kullanmamıştım bu fonksiyonu. bir de el atmışken boş bir zamanında nesneleri şöyle açıklayıcı bir şekilde anlatsan. bir türlü anlayamıyorum class’ları
29 Aralık 2007, 18:34
@cağlar erhan abi sık güncelleme yapamıyor. daha doğrusu çok yazı değil kaliteli yazmaya özeniyor. 10 yazı yazacağına 1 kaliteli yazı yazıyor.
ayrıca diğer sitelerde de yazı vs. yazdığı için çok ilgilenmesi zor.
29 Aralık 2007, 20:41
Teşekkürler, gerçekten güzel bir yazı olmuş.
30 Aralık 2007, 16:38
php derya deniz, her gün yeni bir şey keşfedip keyiflenebiliniyor.
30 Aralık 2007, 21:08
bir eklemede benden olsun. Eğer mapping için kullandığınız fonksiyon birden fazla parametre gerektiriyorsa parametreleri sıra ile yazmanız yeterli olacaktır. Örnek vermek gerekirse:
sonuç:
Array
(
[0] => ‘Güzel İZMİR’,
[1] => ‘Güzel İSTANBUL’,
[2] => ‘Güzel ANKARA’
)
30 Aralık 2007, 21:47
Çok işe yarayabilecek bir fonksiyonmuş. Bu fonksiyonu gün yüzüne çıkardığın için teşekkürler
7 Ocak 2008, 09:28
Programcının işini kolaylaştıran bir fonksiyonmuş. Teşekkürler.
22 Şubat 2008, 19:21
site gerçekten harika daha çok bilgi istiyoruz daha çok