php, mysql, html, css, js, c#, java, c++ coder

ya array_map yetmezse :)

Mart 10, 2009 | In: Salata

bir arrayınız var örneğin bu $_POST olsun bundan gelen tüm verileri htmltaglarını escape etmek istiyorsunuz mesala bu yapan fonksiyon html de htmlspecialchars ve htmlentities fakat entities latin5 i yani türkçe yi desteklemiyordu 15-20 ay önce hatırladığım kadarıyla :D o sebeple biz genelde htmlspecialchars kullanıyoruz.
htmlspecialchars ın temelinde de
$string = str_replace(array(’<','>‘) , array(’&lt;’,'&gt;’), $string);
bu şekilde gidiyor ” bunuda "o; yapıyor falan filan
function htmlkacisi($string)
{
$string = str_replace(array(’<','>‘) , array(’&lt;’,'&gt;’), $string);
return $string;
}
ile
htmlspecialchars in html tag larını değiştirmiş şekli gibi düşünebilirsiniz. ama tabi liste sadece < > dan ibaret değil biraz daha uzun ” ‘ vs. replace işlemleri de var :)

herneyse asıl konumuza dönecek olursak;
az önce birşeyler yazarken array altına bir array daha geldi error verdi işin temeline inmeyi severim hazıra konmak yerine temelden yapmak her zaman iyidir. Bu da ksü de tuğrul diye bir hocamız var dı bildiğin for döngüsü durur iken sınavda if else ve goto komutları ile qbasic de for döngüsü yazdırmıştı hatırladığım kadarıyla bölümde tek ben yapmıştım :D
şimdi iç içe array da şöyle bir sonuc varsa örneğin
post içeriği
array(
[saho] => <b>akca</b>
)
gibi bir veri olsa buna
$_POST = array_map(’htmlspecialchars’,$_POST);
gibi bir kullanımda sonra çıktısı
array(
[saho] => &lt;b&gt;akca&lt;/b&gt;
)
gibi olacaktır ama verimiz aşağıdaki gibiyse
array (
[saho] => array (
[0] => akca
[1] => php
[2] => mysql
)
)
array içeriğine işlem yapamayıp bir error mesajıyla bunu süsleyecektir php onun yerine şöyle yapar isek
Çözüm : 1 ( ilerisi için yetersiz )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    function array_map($callback,$veri)
    {
        foreach ($veri as $key=>$val)
        {
            $don = array();
            if ( is_array($val) )
            {
                foreach ($val as $key2=>$val2)
                {
                    $don[$key][$key2] = $callback($val2);
                }
            }
            else
            {
                $don [$key]= $callback($val);
            }
        }
        return $don;
    }

burada array ı alıyor içeriğini döndürüyor o sırada içeriği array değilse direk callback ile çağırdığımız daha önceden tanımlı bir fonksiyonu işliyor ve döndürüyor geri sonucu eğer array ise onun içeriğinde foreach ile
döndürüyor ve sonucu yazıyor. Fakat bu biraz yetersiz iç içe 2 değilde 3 array olursa o zaman problem yaratabilir :D güç bu ama biz bunu full otomatik yapmak için şöyle yapıyoruz
Çözüm 2: ( budur :D )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    function array_map($callback,$veri)
    {
        $don = array();
        foreach ($veri as $key=>$val)
        {
            if ( is_array($val) )
            {
                $don[$key] = saho::array_map($callback,$val);
            }
            else
            {
                $don[$key] = $callback($val);
            }
        }
        return $don;
    }

burada ise gelen array foreach ile dönderiyor döngü içerisinde array mı değil mi denetimi yapıyor array değilse direk callback fonksiyonuna tabi tutuyor veriyi ve $don arrayına aktarıyor eğer array ise tekrar fonksiyona gönderiyor herşey baştan başlıyor veriye bakıyor arraymı değil mi array sa yine başa dönüyor yine foreach ile tarıyor array değilse fonksiyona tabi tutup sonucu $don array ına yansıtıyor. Anlamadıysan ben karışık yazmadım bu fonksiyon çalışırken aynı fonksiyonu tekrar çağırmak zaten karışık bir iş kasma al kullan :D
eksik değinmediğim şeyler olabilri yazabilirsiniz.
iyi günlerde kullanmanız dileğiyle :p

Not : ben kendi class ım içerisinde kullandığım için direk array_map adıyla yeni fonksiyon oluşturdum class içerisine siz kullanırken aşağıdaki gibi kullanabilirsiniz :d

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function saho_array_map($callback,$veri)
    {
        $don = array();
        foreach ($veri as $key=>$val)
        {
            if ( is_array($val) )
            {
                $don[$key] = saho_array_map($callback,$val);
            }
            else
            {
                $don[$key] = $callback($val);
            }
        }
        return $don;
    }
Paylaş ve HalayÇek: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Technorati
  • Digg
  • del.icio.us
  • YahooMyWeb
  • Taggly
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists
  • blogmarks
  • IndiaGram
  • Internetmedia
  • Netscape
  • Reddit
  • Scoopeo
  • StumbleUpon

Comment Form

Takvim

Temmuz 2010
Pts Sal Çar Per Cum Cts Paz
« Haz    
 1234
567891011
12131415161718
19202122232425
262728293031