дерево (строка) -> массив ??

  • Автор темы Автор темы blam
  • Дата начала Дата начала

blam

Новичок
дерево (строка) -> массив ??

как порезать строку типа
cat
-cat1
-cat2
--cat3
--cat4
cat5

в массив
PHP:
array(
  [cat]=0,
  [cat1]='cat',
  [cat2]='cat',
  [cat3]='cat2',
  [cat4]='cat2',
  [cat5]=0,
 )

???
 
своих мыслей совсем нет?

PHP:
<?php

$tree = 'cat
-cat1
-cat2
--cat3
--cat4
cat5';

$stack = array(-1 => 0);

$new_tree = array();

foreach (explode("\r\n", $tree) as $node)
{
  $new_node = ltrim($node, '-');
  $current_level = strlen($node) - strlen($new_node);
  $stack[$current_level] = $new_node;
  $new_tree[$new_node] = $stack[$current_level - 1];
}

var_dump($new_tree);

простите за готовый код, просто интересно стало, насколько элегантным получится алгоритм :-)
 
zerkms
что то код у тебя не то делает судя по результату вар дампа
а гоню "\r\n" -> "\n"
 
Single
разберёшь на строки уже как тебе удобнее, в зависимости от контекста.
 
Сверху