PHP

PHP array_map Fonksiyonu

Herkesin bildiği gibi Albert Einstein dünya bilim tarihine damga vurmuş, bilimden de öte tüm insanlığın zihninde yer etmiştir. Parçacık Fiziği, Kuantum Teorisi, İzafiyet Teorisi gibi bir çok bilimsel çalışma, tahmin edersiniz ki çok karmaşık matematiksel işlemlerin sonucunda anlaşılır hale gelir.

Peki burada Albert Einstein’ın tam olarak yapmak istediği şey ya da yaptığı şey nedir sizce? Cevabı aslında basit kelimesinde saklı. Einstein, bize “konuyu” daha basit şekilde anlatmak için yıllarını vermiş, bu uğurda çalışmıştır.

[blockquote source=”Albert Einstein”]Eğer basit bir şekilde anlatamıyorsan, o konuyu anlamamışsın demektir.[/blockquote]

Ne Yapıyoruz?

Her fonksiyon / metod birer nesne olarak anılırlar OOP düzeninde. Bu nesneler kullanım alanlarına göre isimlendiriliyor. Örneğin fonksiyonlar, bir sınıf yapısında kullanıldığında metod olarak isimlendiriliyorlar çünkü, artık bir bağımlılıkları var, özgürlüklerini kısmen de olsa yitirdiler.

Fonksiyon / metod kullanırken genelde yaptığımız ise eğer parametre alacaksa bu patrameleri tek tek tanımlamak ve bu değişkenleri işlemek oluyor. En son yaptığım bir geliştirmede bazı fonksiyonlara parametreleri tek tek göndermek yerine bir dizi nesnesi olarak gönderdim ve işleme tabi tuttum. Bu bir anlamda sınırsızlığı ve opsiyonelliği de sağlayacaktı.

Daha Kısa Nasıl Olabilir?

Tabii ki bu dizi nesnesini ayıklarken zahmet kaçınılmaz olacak ve kod satırları uzayacak. Devreye yerleşik fonksiyonlarımızdan array_map giriyor ve sorunu çözüyor.

Dikkat edilmesi gereken en önemli nokta ise tek yönlü işlemlerde bu kuralın geçerli olduğu. Diğer bir deyişle array_map fonksiyonu, gönderilen dizideki elemanları sırası ile ve tek tek gönderecektir, yani seri bir şekilde. Örneğin yapacağınız işlem bir $_GET ya da $_POST değerler dizisini özel karakter süzgecinden geçirmek ise bu fonksiyon işinizi fazlasıyla görecektir.

Syntax

array_map aşağıdaki gibi bir kullanım biçimine sahiptir;

[syntax type=”php”]array_map ( callback $fonksiyon , array $dizi1 [, array $... ] )[/syntax]

Açıklamak gerekirse;

  • callback : Hangi fonksiyon için gerçi çağrım işlevi uygulanacaksa bunu belirler.
  • $dizi1 : Fonksiyona işlenmesi için gönderilecek dizi nesnesini belirtir.
  • array $… : Fonksiyona işlenmesi için gönderilecek diğer dizileri belirtir.

array_map yapılan işlemin sonucunu da geriye bir dizi olarak döndürecektir.

Örnek Kullanım

Örnek senaryomuz şöyle olsun; $_GET ile gönderilen tüm değerleri kriptoplayan fonksiyonu uygulatarak ekrana çıktılayalım.

[syntax type=”php”]

function xcrypter($param){
return sha1(md5($param));
}

print_r(array_map(‘xcrypter’, $_GET));

[/syntax]

Test edebilmek adına tarayıcı adres çubuğuna http://localhost:8080/armap.php?id=1&user=tester adresini yazıp sonucu görelim.

[syntax type=”html”] Array ( [id] => 0937afa17f4dc08f3c0e5dc908158370ce64df86 [user] => 721c0d4e5013c9fb054b3288adf6b82ad96fccf9 ) [/syntax]

Yazdığımız parametreleri alıp, sonuçları da ilgili metodun işlevine göre yeniden geri çağırdı ve sonucu ekrana yazdırdı. Bu kullanımı özellikle yerleşik PHP fonksiyonlarda tercih etmekte oldukça yarar var.

[alert style=”yellow”]PHP uygulamalarını bilgisayarınızda nasıl çalıştıracağınızı bilmiyorsanız, Fatih Çal tarafından yazılan PHP Kodlarını Çalıştır: EasyPhp Kurulumu anlatımını okuyabilirsiniz. [/alert]


Hmm… İlginç!?

Sizce nedir ilginç olan? Kendisi değil tabiiki de 🙂 array_map fonksiyonunu bir diğer kullanımı ilginç (ya da “doğası gereği bu şekilde, ilginç olan bir yanı yok” diyebilirsiniz) gelebilir. Şöyle ki geri çağırım uygulayacak fonksiyon yerine NULL değerini gönderirseniz, size sonuç olarak bir diziler dizisi döndürecektir. Örneğin 2 adet dizi oluşturalım ve eleman sayıları da birbirinden farklı olsun, sonra da ekrana sonucu bastıralım.

[syntax type=”php”]

$x = array(“Selam”, “Merhaba”, “Güle Güle”, “Hoş Geldin”, “Nasılsın?”);
$y = array(2, 4, 6, 8);
$t = array_map(NULL, $x, $y);

var_dump($t);

[/syntax]

Adres çubuğuna ilgili dosya yolunu yazıp çalıştıralım. Sonuç;

[syntax type=”html”] array(5) { [0]=> array(2) { [0]=> string(5) “Selam” [1]=> int(2) } [1]=> array(2) { [0]=> string(7) “Merhaba” [1]=> int(4) } [2]=> array(2) { [0]=> string(11) “Güle Güle” [1]=> int(6) } [3]=> array(2) { [0]=> string(11) “Hoş Geldin” [1]=> int(8) } [4]=> array(2) { [0]=> string(11) “Nasılsın?” [1]=> NULL } } [/syntax]

Dikkat ettiyseniz, ilk dizideki son değere karşılık ikinci dizide değer olmadığı için NULL değerinde bir eleman daha eklendi.

Ya Sonrası?

array_map lambda ifadeleri ile de kullanılabilir. Bunun için ve daha fazlası için PHP.net üzerindeki array_map dokümanını okuyabilirsiniz.

Mutlu kodlamalar.