Ben bir tablodan hiyerarşik veri almak için çalışıyorum ama bunu yapmak için başarısız duyuyorum. Ifc_key, ifc_name, ifc_parent: tablo (şimdilik) aşağıdaki sütunları vardır. ifc_key kullanılmaz. (Bu işlev için kullanılan birincil anahtar değil.
Amacı, bir dizi elde etmektir. Her eleman bir "ebeveyn" arayüzüdür. (Yani tüm bu kök elemanları ifc_parent seti (ayarlı ise ifc_name eşittir) yok ifc_name değerlerdir.
Aşağıdaki düzeni (demo) düşünün:
ifc_key | ifc_name | ifc_parent
0 | parent_ifc |
1 | a0a | parent_ifc
2 | a0b | parent_ifc
3 | b0a | vif1
4 | b0b | vif1
5 | vif1 | a0a
Yani sorgusu oluşturulan ben arıyorum dizidir:
Array
(
[parent_ifc] => Array
(
[a0a] => Array
(
[vif1] => Array
(
[0] => b0a
[1] => b0b
)
)
[a0b] =>
)
)
Ben ile geldi işlevi bu paragrafın altında olduğunu. Ben çocuk bulma üzerine kendisini çağırır ama sorun çocukların hiçbiri bu yöntemi ilk çağrısı üzerine seçilmiş olmasıdır tekrarlamalı bir fonksiyon, oluşturulan istedim. (Boş ebeveyn ile bu anne kendileri). (- Bu teoride belirsiz olabilir ve muhtemelen onların çocukları, vb) Yani sadece geri anne olsun, ama çocukların hiçbiri.
public static function getByFilerOrganisedChildren($filer_id, $parent = '')
{
$table = new Filer_Interface_Table();
$where[] = $table->getAdapter()->quoteInto('ifc_system_id = ?', $filer_id);
$where[] = $table->getAdapter()->quoteInto('ifc_parent = ?', $parent);
$rows = $table->fetchAll($where, 'ifc_parent ASC');
foreach ($rows as $row) {
if ($row->ifc_parent == '') $data[] = $row->ifc_name;
else {
$data[$row->ifc_parent][] = $row->ifc_name;
self::getByFilerOrganisedChildren($filer_id, $row->ifc_parent);
}
}
return (isset($data) ? $data : false);
}