Türkiye Online Medya Araştırması

İçeriğin rss beslemesi kullanımda değil Soru - Cevap Bölümü / Kategori: Programlama

22/03/2010 - 10:19:57 cevap (4) Okunma : 2813 Bu yazıyı 2 kişi tuttu.

php recursive function dan array oluşturmak

merhaba

burdaki örnekde http://saltokunur.net/showpost.php?p=88885&postcount=2

mysql den verileri cekip ekrana basa biliyorum ancak veri tabanın dan aldıgım bilgiyi array a çevirmem gerekiyor.

şimdiden tesekkürler.

adres muratkgirgin profilini göster
Murat Kgirgin 25.05.2008 18:53:37
En iyi cevap mı ?

Selamlar

EPey geç bir yanıt olmakla ve Veritabanı bağlantısı olmamakla birlikte aşağıdaki 3 sayfalık makalede PHP Recursive Foksiyonlar konusu ayrıntılı olarak işlenmiş.

http://www.communitymx.com/content/article.cfm?page=1&cid=7CD16

umarım işine yarar

kolay gelsin

adres MotionCoder profilini göster
Mehmet KARACA 31.05.2008 18:09:42
En iyi cevap mı ?

merhaba

verdiginiz link i daha önceden göz gezdirmistim gidene çok tesekkürler. forumda sormadan önce baya bi google arastırması yapıyorum.

yapmaya çalısıtıgım sınırsız kategorili tree menu buldugum javascript tree örnegi json destekliydi php recursiveden array olusturamadıgım için mecbur başkabir tree buldum direk html bastım ekrana şimdilik sorunumu çözdüm.

php deki array ı json a çevirmek için şöle bir kod ögrendim ihtiyacı olana.

 json_encode( $array) 

recursive function dönerken döngünün derinligini ve konumunu kontrol etmeyi hala basaramadım


// function =========================================================================
function Listele($hedef){
    $sorgu = mysql_query("select * from tree where parent_id = '".$hedef."'");
    if(mysql_num_rows($sorgu) <= 0){
        echo("</li>\r");  // enson açilan li etiketinin içerigi olmadigindan kapatiliyor.
        return; 
        }

    echo("<ul>\r");     // ul ile yeni bir kategori açiliyor.
    while($sonuc = mysql_fetch_assoc($sorgu)){

        echo( '<li><span _id="'.$sonuc["id"].'" _p_id="'.$sonuc["parent_id"].'" _u_id="'.$sonuc["urun_id"].'" _tip="'.$sonuc["tip"].'" class="text">'.$sonuc["title"] .'</span>' );

        Listele($sonuc["id"]);
    }
    echo("</ul>\r");    // ul ile açilan kategori kapatiliyor.
}
// end function =========================================================================

kolaygelsin..<<

adres metoikos profilini göster
Yılmaz Uğurlu 03.06.2008 11:06:47
En iyi cevap mı ?
Faydalı cevap

Derinliğinden kasıt ana menüye bağlı olan alt menüleri almakta mı zorlanıyorsunuz? Biraz daha bilgi verirseniz sanırım uygun bir çözüm yolu bulabiliriz. Benim anladığım veritabanı sorgu sonucunu, sıradaki kayıdın alt menu(kategori ya da içerik de olabilir)'lerini alarak iç içer geçmiş bir array oluşturmak istiyorsunuz?

Bunun için iki fonksiyon oluşturabilirsiniz, birincisi id parametresini aldığı içerie ait alt içerikleri döndürür, gördüğüm kadarı ile verdiğiniz örnekde parent isimli bir alan var, bu o kaydın bağlı olduğu üst kaydı gösteriyor sanırım.

İkinci fonksiyon sıradaki içeriğe ait alt kayıt var mı yok mu kontrol yapan fonksiyon olur. Kısa bir örnekleme yaparsak.


function altMenuVarMi($parent)
{
    // varsayılan olarak false döndürelim
    $alt_menu= false;
    // gönderilen parent değişkenine bağlı içerik var mı sayalım
    $sorgu= mysql_query(sprintf("select COUNT(*) AS kayit from tree where parent_id = %d", $parent));
    $sonuc= mysql_fetch_assoc($sorgu);
    // eğer kayıt var ise
    if ($sonuc['kayit'] > 0)
    {
        $alt_menu= true; // true yani içerik var olarak işaret koyalım
    }

    return $alt_menu;
}
$dizi = array();
function Listele($hedef= 0, &$dizi)
{
    /*
     * hedef parametresi 0 dan büyük ise gönderilen değere ait alt kayıtları buluruz
     * eğer sıfıra eşit ise parent_id değeri 0 olan ana menü içeriklerini alırız
    */
    $sorgu = mysql_query(sprintf("select * from tree where parent_id = %d", $hedef));
    // eğer bir kayıt dönmüş ise
    if (mysql_num_rows($sorgu) > 0)
    {
        // kayıtları üzerine sıra ile döndüye girerek gerekli dizi yapısını oluşturalım
        while ($sonuc= mysql_fetch_assoc($sorgu))
        {
            // sıradaki kaydın bilgilerini dizimizde oluşturduğumuz yeni elemana ekleyelim
            // menu_3, menu_4, şeklinde dizi elemanlarımızı sıralıyoruz
            $dizi['menu_'.$sonuc["id"]]= array (
                'id' => $sonuc["id"],
                'parent' => $sonuc["parent_id"],
                'urun' => $sonuc["urun_id"],
                'tip' => $sonuc["tip"],
                'tip' => $sonuc["title"]
            );
            // bu menüye ait alt menüler için boş bir dizi oluşturalım
            $dizi['menu_' . $sonuc["id"]]['childs']= array ();
            // oluşturduğumuz bu childs elemanını Listele fonksiyonuna $dizi isimli değişkende referans olarak aktaracağız
            // bu sayede $dizi['menu_'.$sonuc["id"] elemanının childs elemanına ona ait alt menüleri eklemiş olacağız
            // öncelikle bakmamız gereken sıradaki elemana ait alt içerik var mı?
            if (altMenuVarMi($sonuc["id"]))
            {
                // şimdi childs elemanımıza alt içerikleri dolduralım
                Listele($sonuc["id"], &$dizi['menu_'.$sonuc["id"]]['childs']);
            }
        }
    }

    // sonuç olarak dizimizi döndürelim
    return $dizi;
}
print_r(json_encode(Listele(0, &$dizi)))

100% emin değilim çalığ çalışmayacağından fazla zamanım olmadığı için deneme ya da farklı şekilde örneklendirme şansım yok, ancak buna benzer bir şekilde istediğin iç-içe diziyi oluşturman mümkün.

adres MotionCoder profilini göster
Mehmet KARACA 03.06.2008 12:53:15
En iyi cevap mı ?
Faydalı cevap

yapmaya çalıstıgım şey tam olarak buydu çok teşekkürler.

aç-kapa Bu Yazıyı Tutanlar

yeni üyelik | şifremi unuttum

aç-kapa Toplantı Özgür Yazılım ve Linux Günleri '10

Özgür Yazılım ve Linux Günleri '10

İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü ve Linux Kullanıcıları Derneği'nin 9 yıldır düzenlemekte oldukları etkinlikler bu yıl `Özgür Y...
Kategori: Toplantı

aç-kapa Yarışma 3. Uluslararası Ekslibris Yarışması: İstanbul 2010

3. Uluslararası Ekslibris Yarışması: İstanbul 2010

İstanbul Ekslibris Dernegi, Feyziye Mektepleri Vakfı ve Işık Üniversitesi, kitaplar için mülkiyet işareti olarak kabul edilen ve üzerinde estetik dege...
Kategori: Yarışma

aç-kapa Konferans Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Generally speaking, the term "New" brought about debates. We try to open up and elucidate the term "New" along with "Interact...
Kategori: Konferans

aç-kapa Konferans 3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

Konferans ile ilgili ayrıntılı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz: http://www.futurelearning.org.tr/katilim_cagrisitr.pdf ...
Kategori: Konferans

aç-kapa Toplantı IV. ANKARA TASARIM GÜNLERİ 2010

IV. ANKARA TASARIM GÜNLERİ 2010

IV. Ankara Tasarım Günleri, seminerleri, sunumları, etkinlik tarihleri boyunca gezilebilecek tasarım sergileri, video art gösterimleri, çeşitli worksh...
Kategori: Toplantı

üyeler Son Kahramanlar...

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 60 (50 kayıtlı, 10 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

Blog Bölümü Blogevi.com'a Taşınıyor

Selam arkadaşlar MMIstanbul'da , tasarımcı ve programcıların blog yazılarını "feedleyerek" MMIstanbul okurlarını MMIstanbul dışın ...

7.500'üncü üyemiz Cem Koç!

Neler Yapılabilir?

500 Hatası Hakkında!

Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)

coldfusion mysql ubuntu
 
sponsor adobe istanbul