मैं एक फ़ंक्शन लिखने के लिए देख रहा हूं, जो पृष्ठों / श्रेणियों (एक फ्लैट डेटाबेस परिणाम से) की एक सरणी लेता है और मूल आईडी पर आधारित नेस्टेड पृष्ठ / श्रेणी आइटम की एक सरणी उत्पन्न करता है। मैं इसे पुनरावर्ती रूप से करना चाहूंगा, ताकि किसी भी स्तर के घोंसले का शिकार हो सके।
उदाहरण के लिए: मैं सभी पृष्ठों को एक क्वेरी में ला रहा हूं, और यह वह है जो डेटाबेस तालिका जैसा दिखता है
+-------+---------------+---------------------------+
| id | parent_id | title |
+-------+---------------+---------------------------+
| 1 | 0 | Parent Page |
| 2 | 1 | Sub Page |
| 3 | 2 | Sub Sub Page |
| 4 | 0 | Another Parent Page |
+-------+---------------+---------------------------+
और यह वह सरणी है जिसे मैं अपने दृश्य फ़ाइलों में संसाधित करना चाहता हूं:
Array
(
[0] => Array
(
[id] => 1
[parent_id] => 0
[title] => Parent Page
[children] => Array
(
[0] => Array
(
[id] => 2
[parent_id] => 1
[title] => Sub Page
[children] => Array
(
[0] => Array
(
[id] => 3
[parent_id] => 1
[title] => Sub Sub Page
)
)
)
)
)
[1] => Array
(
[id] => 4
[parent_id] => 0
[title] => Another Parent Page
)
)
मैंने देखा है और लगभग हर समाधान की कोशिश की है जो मुझे आया है (स्टैक ओवरफ्लो पर यहां उनमें से बहुत कुछ है, लेकिन कोई सौभाग्य नहीं मिला है जो कुछ सामान्य रूप से पर्याप्त हो जो दोनों पृष्ठों और श्रेणियों के लिए काम करेगा।
यहाँ मैं निकटतम हो गया हूँ, लेकिन यह काम नहीं करता क्योंकि मैं बच्चों को पहले स्तर के माता-पिता को सौंप रहा हूँ।
function page_walk($array, $parent_id = FALSE)
{
$organized_pages = array();
$children = array();
foreach($array as $index => $page)
{
if ( $page['parent_id'] == 0) // No, just spit it out and you're done
{
$organized_pages[$index] = $page;
}
else // If it does,
{
$organized_pages[$parent_id]['children'][$page['id']] = $this->page_walk($page, $parent_id);
}
}
return $organized_pages;
}
function page_list($array)
{
$fakepages = array();
$fakepages[0] = array('id' => 1, 'parent_id' => 0, 'title' => 'Parent Page');
$fakepages[1] = array('id' => 2, 'parent_id' => 1, 'title' => 'Sub Page');
$fakepages[2] = array('id' => 3, 'parent_id' => 2, 'title' => 'Sub Sub Page');
$fakepages[3] = array('id' => 4, 'parent_id' => 3, 'title' => 'Another Parent Page');
$pages = $this->page_walk($fakepages, 0);
print_r($pages);
}