Есть массив ([0]=>номер,[1]=>имя): 1. name 1.2. name 2. name 2.1.1. name 2.2.1. name 2.2.2. name 3. name ... 13. name 13.1. name ... Из них надо сделать id,parent,name Я пробывал делать так: Код (Text): foreach ($cat as $k=>$v) { $n[$k]=explode(".",trim($v[0])); do { /* а тут я не могу допереть как смотреть кто чей родитель я предпологаю, что надо смотреть по цифрам номера начиная с первой, а как связать их с id в базе непонимаю... */ } while ($i<count($n[$k])); }
определил максимальную глубину вложенности, но как обрящаться к массиву $a[1]...[]='blah'... жесть... ничего вменяемого нету... вот показать дерево из уже имеющихся данных это просто а как такие данные создать нигде не нашел... помогите плиз...
рекурсия. Хотя на самом деле в Х-мерном массиве смысла нет. Экран у тебя 2хмерный. Поэтому тебе достаточно линейного массива из узлов. Где каждый узел это в свою очередь массив из 3х элементов (хотя можно свести вообще до 2х. Глубина абсолютная или относительно предыдущего и значение) 1. индекс/ключ (1.1, 13.1.1.5 и т.д.) 2. собственно значение. 3. глубина относительно предыдущего элемента. Код (Text): глубина0 |ключ. | значение | --глубина1-- | ключ1. | значение1 ----глубина2---- | ключ2. | значение2 ----глубина3---- | ключ3. | значение3 --глубина4-- | ключ4. | значение4 Для совсем экзотических случаев можешь еще хранить индекс родителя (4й элемент).
в задании у меня сказано, что надо сделать id, parent, name т.е. посчитать все относительно вышестоящего. на счет глубины я вообще не понимаю смысла в ней, хоть и читал про нестед трии. но ничего не понял. теоретически я понимаю как это все сделать, но вот на практике не получается =(
для 1.2.2 parent будет 1.2. спс за ссылку на видеокурс, смотреть точно не буду. потому как сомневаюсь что там объясняют логику построения алгоритмов.
Мгм, логику построения алгоритмов не объясняют нигде По построению дерева. Поскольку у тебя имеется ключ в виде MP. То построить дерево как два пальца об асфальт даже без рекурсии. PHP: <?php $array = array( '1.' => 0, '1.1.' => 100, '1.2.' => 200, '1.2.1.' => 300, '1.2.2.' => 400, '1.3.' => 500, '2.1.' => 600, '2.2.' => 700); var_dump($array); $res= array(); $tmp = &$res; foreach ($array as $keyMP => $nodeValue) { $path = explode('.', $keyMP); foreach($path as $nodeParent) { if ($nodeParent != '' && isset($tmp[$nodeParent])) { $tmp = &$tmp[$nodeParent]; } elseif($nodeParent == '') { $tmp[] = $nodeValue; } else { $tmp[$nodeParent] = array(); $tmp = &$tmp[$nodeParent]; } } $tmp = &$res; } var_dump($res);