A RecursiveParentChilditerator - مثل recursivedirectoryiterator
-
02-10-2019 - |
سؤال
هناك الكثير من الأمثلة على استخدام المتكرر لتسوية بنية شجرة .. ولكن ماذا عن استخدامه لتفجير بنية شجرة؟
هل هناك طريقة أنيقة لاستخدام هذا ، أو بعض مكتبة SPL أخرى لإنشاء شجرة (اقرأ: اقلب صفيفًا مسطحًا إلى مجموعة من العمق التعسفي) بالنظر إلى جدول مثل هذا:
SELECT id, parent_id, name FROM my_tree
تعديل:أنت تعرف كيف يمكنك القيام بذلك مع الدلائل؟
$it = new RecursiveDirectoryIterator("/var/www/images");
foreach(new RecursiveIteratorIterator($it) as $file) {
echo $file . PHP_EOL;
}
.. ماذا لو كنت تستطيع أن تفعل شيئًا كهذا:
$it = new RecursiveParentChildIterator($result_array);
foreach(new RecursiveIteratorIterator($it) as $group) {
echo $group->name . PHP_EOL;
// this would contain all of the children of this group, recursively
$children = $group->getChildren();
}
: نهاية التحرير
المحلول
وإن لم يكن SPL ، ولكن يمكنك استخدام المراجع (&
) بناء شجرة مع PHP الأصلي:
// untested
$nodeList = array();
$tree = array();
foreach ($result as $row) {
$nodeList[$row['id']] = array_merge($row, array('children' => array()));
}
foreach ($nodeList as $nodeId => &$node) {
if (!$node['parent_id'] || !array_key_exists($node['parent_id'], $nodeList)) {
$tree[] = &$node;
} else {
$nodeList[$node['parent_id']]['children'][] = &$node;
}
}
unset($node);
unset($nodeList);
لا تنتمي إلى StackOverflow