mysql — php конвертирует массив в иерархический вложенный набор для базы данных

Итак, я прочитал это:
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

И я использую MySQL и PHP
Мне нужен скрипт, который конвертирует только старые данные в данные с левыми / правыми значениями.

Мне не нужно добавлять / обновлять вещи.

Данные php

$in_array = array (
array(
'id' => 400,
'n' => 'Sub 1a',
's' => array (
array (
'n' => 'Sub 1b',
'id' => 421,
's' => array (
array (
'n' => 'Sub 1c',
'id' => 422,
)
)
)
)
),
array(
'id' => 500,
'n' => 'Sub 2a',
's' => array (
array (
'n' => 'Sub 2b',
'id' => 521,
's' => array (
array (
'n' => 'Sub 3b',
'id' => 522,
)
)
)
)
)
);

В данный момент я пытаюсь решить эту проблему с помощью этого скрипта, но это не работает так, как должно.

$a_newTree = array();
function rebuild_tree($parent, $left) {
global $a_newTree;

$indexed = array();

// the right value of this node is the left value + 1
$right = $left+1;

// get all children of this node
foreach($parent as $cat){
// recursive execution of this function for each
// child of this node
// $right is the current right value, which is
// incremented by the rebuild_tree function

if(is_array($cat) && array_key_exists('s',$cat)){
$indexed['n'] = $cat['n'];
$right = rebuild_tree($cat, $right);
}
}

// we've got the left value, and now that we've processed
// the children of this node we also know the right value
array_push($a_newTree,array(':lft'=>$left,':rgt'=>$right,':name'=>'bla'));
// return the right value of this node + 1
return $right+1;
}

rebuild_tree($in_array, 1);

Я могу получить доступ к MySQL и запрос, поэтому вывод выглядит так

Sub 1a | Sub 1b | Sub 1c

Sub 1a | Sub 1b | Sub 1d

Sub 1a | Sub 1b | Sub 1e

Sub 1a | Sub 1f | Null

Sub 1a | Sub 1g | Null

Sub 2a | Sub 2b | Sub 2c

С этими данными я сделал массив выше.

1

Решение

Массив не был в порядке.

Это работает

$in_array = array (
// array(
'id' => 400,
'n' => 'Sub 1a',
's' => array (
//       array (
'n' => 'Sub 1b',
'id' => 421,
's' => array (
//               array (
'n' => 'Sub 1c',
'id' => 422,
//              )
)
//    )
//      )
),
array(
'id' => 500,
'n' => 'Sub 2a',
's' => array (
//  array (
'n' => 'Sub 2b',
'id' => 521,
's' => array (
//          array (
'n' => 'Sub 3b',
'id' => 522,
//          )
)
//  )
)
)
);

$a_newTree = array();
function rebuild_tree($parent, $left) {
global $a_newTree;

$indexed = array();
$right = $left+1;

if(array_key_exists('n',$parent)){
$indexed['n'] = $parent['n'];
}else{
$indexed['n'] = '?';
}


foreach($parent as $cat){
if(is_array($cat)){
$right = rebuild_tree($cat, $right);
}
}


array_push($a_newTree,array(':lft'=>$left,':rgt'=>$right,':name'=>$indexed['n']));

return $right+1;
}

rebuild_tree($in_array, 1);
0

Другие решения

Других решений пока нет …