如何将像这样的数组转换为实时代码中的多维数组? 我有大约20个具有嵌套类别的Toplevel类别,如下所述。 嵌套可以达到6层深。
作为数据库查询的结果启动数组
Array
(
[1] => Array
(
[id] => 10
[parent_id] => 0
[name] => Hitachi
)
[2] => Array
(
[id] => 15
[parent_id] => 0
[name] => Milwaukee
)
[3] => Array
(
[id] => 20
[parent_id] => 0
[name] => Thoshiba
)
[4] => Array
(
[id] => 31
[parent_id] => 10
[name] => tools
)
[5] => Array
(
[id] => 32
[parent_id] => 10
[name] => Spareparts Hitachi
)
[6] => Array
(
[id] => 35
[parent_id] => 32
[name] => electric parts
)
[7] => Array
(
[id] => 37_
[parent_id] => 32
[name] => hydraulic Parts
)
[8] => Array
(
[id] => 40_
[parent_id] => 32
[name] => other Parts
)
[9] => Array
(
[id] => 43_
[parent_id] => 32
[name] => more Parts
)
[10] => Array
(
[id] => 45_
[parent_id] => 15
[name] => Spareparts Milwaukee
)
........
)
我的目标是获得一个这样的嵌套数组:
Array
(
[1] => Array
(
[id] => 10
[parent_id] => 0
[name] => Hitachi
[children] => Array
(
[id] => 31
[parent_id] => 10
[name] => tools
)
(
[id] => 32
[parent_id] => 10
[name] => Spareparts Hitachi
[children] => Array
(
[id] => 35
[parent_id] => 32
[name] => electric parts
)
(
[id] => 37_
[parent_id] => 32
[name] => hydraulic Parts
)
(
[id] => 40_
[parent_id] => 32
[name] => other Parts
)
)
[2] => Array
(
[id] => 15
[parent_id] => 0
[name] => Milwaukee
[children] =>
(
[id] => 45_
[parent_id] => 15
[name] => Spareparts Milwaukee
)
)
[3] => Array
(
[id] => 20
[parent_id] => 0
[name] => Thoshiba
)
)
最终结果应该是建立在线商店中的类别树,以选择嵌套类别并显示所选猫的产品。 为了构建树,我想使用tapirsoft的rtree。
答案 0 :(得分:4)
所以你必须为此写一个递归函数:
function buildTree pArray, pParentID
if pParentID is empty then put 0 into pParentID
local tBranch
repeat for each key tKey in pArray
local tElement
put pArray[tKey] into tElement
if (tElement["parent_id"] is pParentID) then
local tChildren
put buildTree(pArray, tElement["id"]) into tChildren
if the number of elements of tChildren > 0 then
put tChildren into tElement["children"]
end if
put tElement into tBranch[the number of elements of tBranch + 1]
end if
end repeat
return tBranch
end buildTree
为了测试脚本,我创建了一个LiveCode数组" tFlatArray"将您的数据放在mouseUp处理程序中,然后调用递归" buildTree"函数以您正在寻找的格式返回结构化数组。我从您提供的示例中更改了一些" parent_id"数字,以便10个元素组成一个嵌套数组:
on mouseUp
local tFlatArray
put 1 into tFlatArray[1]["id"]
put 0 into tFlatArray[1]["parent_id"]
put "Hitachi" into tFlatArray[1]["name"]
put 2 into tFlatArray[2]["id"]
put 3 into tFlatArray[2]["parent_id"]
put "Hitachi" into tFlatArray[2]["name"]
put 3 into tFlatArray[3]["id"]
put 3 into tFlatArray[3]["parent_id"]
put "Thoshiba" into tFlatArray[3]["name"]
put 4 into tFlatArray[4]["id"]
put 10 into tFlatArray[4]["parent_id"]
put "tools" into tFlatArray[4]["name"]
put 5 into tFlatArray[5]["id"]
put 10 into tFlatArray[5]["parent_id"]
put "Spareparts Hitachi" into tFlatArray[5]["name"]
put 6 into tFlatArray[6]["id"]
put 32 into tFlatArray[6]["parent_id"]
put "electric parts" into tFlatArray[6]["name"]
put 7 into tFlatArray[7]["id"]
put 32 into tFlatArray[7]["parent_id"]
put "hydraulic Parts" into tFlatArray[7]["name"]
put 8 into tFlatArray[8]["id"]
put 32 into tFlatArray[8]["parent_id"]
put "other Parts" into tFlatArray[8]["name"]
put 9 into tFlatArray[9]["id"]
put 32 into tFlatArray[9]["parent_id"]
put "more Parts" into tFlatArray[9]["name"]
put 10 into tFlatArray[10]["id"]
put 9 into tFlatArray[10]["parent_id"]
put "Spareparts Milwaukee" into tFlatArray[10]["name"]
put 32 into tFlatArray[32]["id"]
put 0 into tFlatArray[32]["parent_id"]
put "Parts" into tFlatArray[10]["name"]
local tStructuredTree
put buildTree(tFlatArray) into tStructuredTree
end mouseUp
答案 1 :(得分:0)
基本上你只需将一个数组放入另一个数组中。以下原则适用于我。
//put information into child array
put "Hitachi" into tChildArray[1][name]
put 10 into tChildArray[1][id]
// put this child array into a parent array
put tChildArray[1] into tParentArray[1][children][array]
...