そのため、メニューの構造を含む PHP ページに JQuery 経由で渡された連想配列があります。これは効果的に次のようになります。
[{"id":1,"children":[{"id":2,"children":[{"id":3},{"id":4}]},{"id":5}]}]
文字列をデコードし、次のように json_decode を使用して連想配列にしました。
$cleanJSON = json_decode($JSON,true);
これまでのところすべて問題なく、次のような結果が得られます。
Array (
[0] => Array
(
[id] => 1
[children] => Array
(
[0] => Array
(
[id] => 2
[children] => Array
(
[0] => Array
(
[id] => 3
)
[1] => Array
(
[id] => 4
)
)
)
[1] => Array
(
[id] => 5
)
)
)
)
私が抱えている問題は、この新しい構造でデータベースを更新できるように、各項目の左右のネストされたセット値を把握する必要があることです。
これを行っている理由は、ネストされたセット モデル内でメニュー項目の並べ替えを実行できるようにするためです。
以下の例のような結果の配列を取得することは完璧です:
Array (
[0] => Array
(
[id] => 1
[left] => 1
[right] => 10
)
[1] => Array
(
[id] => 2
[left] => 2
[right] => 7
)
[2] => Array
(
[id] => 3
[left] => 3
[right] => 4
)
[3] => Array
(
[id] => 4
[left] => 5
[right] => 6
)
[4] => Array
(
[id] => 5
[left] => 8
[right] => 9
)
)
以下のコードはめちゃくちゃでまったく機能しませんが、私がそれで得た限りです:
$i_count = 1;
$i_index = 1;
$a_newTree;
function recurseTree($nestedSet)
{
global $i_count;
global $a_newTree;
$i_left = $i_count;
$a_newTree[$i_count-1]['left'] = $i_left;
$i_count++;
foreach ($nestedSet AS $key => $value)
{
if ($value['children'])
{
foreach($value['children'] as $a_child)
{
recurseTree($a_child); // traverse
}
}
}
$i_right=$i_count; // right = count
$a_newTree[$i_count-1]['right'] = $i_right;
$i_count++; // count+1
}
どんな助けでも大歓迎です!