gpt4 book ai didi

arrays - 在 livecode 中将数组转换为多维数组

转载 作者:行者123 更新时间:2023-12-02 08:32:04 24 4
gpt4 key购买 nike

如何在 livecode 中将这样的数组转换为多维数组?我有大约 20 个带有嵌套类别的顶级类别,如下所述。嵌套深度最多可达 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。

最佳答案

所以你必须为此编写一个递归函数:

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

为了测试脚本,我在 mouseUp 处理程序中使用您的数据创建了一个 LiveCode 数组“tFlatArray”,然后调用递归“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

关于arrays - 在 livecode 中将数组转换为多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24786919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com