Example #1
0
function mapTree($dataset, $parent = null, $levels = 0)
{
    if ($levels > 100) {
        print 'Possible infinite recursion';
        return;
    }
    $tree = array();
    foreach ($dataset as $id => $node) {
        if ($node['parent'] !== $parent) {
            continue;
        }
        $node['children'] = mapTree($dataset, $id, $levels + 1);
        $tree[$id] = $node;
    }
    return $tree;
}
Example #2
0
        if (!$node['parent']) {
            // не имеет родителя, т.е. корневой элемент
            $tree[$id] =& $node;
        } else {
            /*
              Иначе это чей-то потомок
              этого потомка переносим в родительский элемент, 
              при этом у родителя внутри элемента создастся массив childs, в котором и будут вложены его потомки
            */
            $dataset[$node['parent']]['childs'][$id] =& $node;
            //
        }
    }
    return $tree;
}
$newarr = mapTree($dataset);
// print_r($newarr);
// die();
// функция дает возможность многомерного вывода массива с учетом иерархии
// для этого и прописана переменная $margin
// но у меня на сайте будет не более 1 подкатегории те 1категория 1.1 подкатегория
function array_rekurs($newarr, $margin = 10, $cat = null)
{
    foreach ($newarr as $id => $value) {
        if ($value[parent] == 0) {
            $cat = 'cat';
        } else {
            $cat = null;
        }
        echo "<li class = '{$cat}'><a href='vitrina.php?cat_id={$value['cat_id']}&parent_id={$value['parent']}'>{$value['name_cat']}</a></li>";
        if ($value['childs']) {
Example #3
0
$dataset = array();
for ($i = 0; $i < $maxNodes; $i++) {
    $parent = rand(-1, $i - 1);
    // We use $i rather than maxNodes here to avoid infinite loops
    if ($parent == -1) {
        $parent = null;
    }
    $dataset[$i] = array('name' => 'Node ' . $i, 'parent' => $parent);
}
// Initialize variables
$startTime = 10;
$endTime = 10;
$tree = array();
// Build tree
$startTime = microtime(true);
$tree = mapTree($dataset);
$endTime = microtime(true);
// Print benchmark
print '<h2>Benchmark</h2>';
print $endTime - $startTime . ' seconds<br>';
// Print tree
print '<h2>Tree</h2>';
display_tree($tree);
// Print dataset
print '<h2>Dataset ' . (count($dataset > 100) ? '(partial)' : '') . '</h2>';
print '<pre>';
if (count($dataset > 100)) {
    print_r(array_slice($dataset, 0, 100));
} else {
    print_r($dataset);
}
Example #4
0
    $data[$row[id]] = $row;
}
function mapTree($dataset)
{
    $tree = array();
    foreach ($dataset as $id => &$node) {
        if (!$node['pid']) {
            $tree[$id] =& $node;
        } else {
            $dataset[$node['pid']]['childs'][$id] =& $node;
        }
    }
    return $tree;
}
// вызываем функцию и передаем ей наш массив
$data = mapTree($data);
function view_cat($dataset)
{
    foreach ($dataset as $menu) {
        echo '<li><a href="?id=' . $menu["id"] . '">' . $menu["text"] . '</a>';
        if ($menu['childs']) {
            echo '<ul>';
            view_cat($menu['childs']);
            echo '</ul>';
        }
        echo '</li>';
    }
}
view_cat($data);
?>