DB çok boyutlu bir dizi oluşturma

2 Cevap php

Ben gerçekten kimse bana bu konuda yardımcı olabilir umuyoruz. Ben şimdi yaklaşık iki gün boyunca onunla mücadele ediyorum ...

Ben bir DB-table "Cihaz" ve bir tablo "Bağlantı" var. Ben şirketin ağ görselleştirmek için kullanıyorum. Ben bu gibi bir dizi ihtiyaç verileri görselleştirmek için kullanın JS-çerçeveye veri aktarmak için:

Array
(
    [id] => 1
    [name] => TestPC1
    [children] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [name] => Testhub 2
                    [data] => Array
                        (
                        )

                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 3
                                    [name] => Rack3
                                    [data] => Array
                                        (
                                        )

                                    [children] => Array
                                        (
                                        )

                                )

                            [1] => Array
                                (
                                    [id] => 4
                                    [name] => Rack4
                                    [data] => Array
                                        (
                                        )

                                    [children] => Array
                                        (
                                        )

                                )

                        )

                )

        )

)

Cihaz tablo bu gibi görünüyor:

A     |     B
-------------------
1     |     2
2     |     3
2     |     4

Bu örneğin görselleştirme bu gibi görünüyor:

http://img34.imageshack.us/img34/4230/netmd.jpg

Herkes nasıl bu diziye db-veri almak için bir fikir var mı?

Teşekkür ederim.

2 Cevap

Diyelim ki Örnekteki uğruna ben verilen tablo arasında bir JOIN sonra döndü veritabanı verileri temsil etmek için bir dizi kullanmak ve ne hayal bir kimlik-> olduğu edeceğiz, bu tabloyu kullanarak PHP bunu yapmak istiyorum diyelim haritalama tablosu Adı:

$links = array(
    array('A' => 1, 'AName' => 'TestPC1', 'B' => 2, 'BName' => 'TestHub2'),
    array('A' => 2, 'AName' => 'TestHub2', 'B' => 3, 'BName' => 'Rack3'),
    array('A' => 2, 'AName' => 'TestHub2', 'B' => 4, 'BName' => 'Rack4')
);

$elements = array();

// Build the tree
foreach ($links as $link) {
    if (!isset($elements[$link['A']])) {
        $elements[$link['A']] = array(
            'id' => $link['A'], 'name' => $link['AName'], 
            'data' => array(), 'children' => array()
        );
    }
    if (!isset($elements[$link['B']])) {
        $elements[$link['B']] = array(
            'id' => $link['B'], 'name' => $link['BName'], 
            'data' => array(), 'children' => array()
        );
    } 
    $elements[$link['A']]['children'][$link['B']] = &$elements[$link['B']]; 
}

// Patch up the indices to start from 0
foreach ($elements as &$element) {
    $element['children'] = array_values($element['children']);
}

$elements = array_values($elements);

Şahsen ben endeksleri yukarı yama rahatsız olmaz, bunu yapmazsanız daha kolay daha sonra KODU girdileri için arama yapacak.

Ebeveyn / çocuk veri girerken dikkatli olun ya da güzel bir dairesel referans ile gireriz.

Sen elbette bir dizi (mysql_fetch_array vb) üreten uygun bir db komutu ile $links için başvurular değiştirmeniz gerekir.

Sana "RDBMS ağaçları temsil etmek nasıl" için (genel olarak bu site ve internet hem de) göz atmanızı öneririz.

Belki, here başlatın.

Kaç "ağaç" yönetmek zorunda, ve hiyerarşi maksimum derinliği bağlı olarak, farklı yaklaşımlar daha fazla veya daha az uygun olabilir.