将一个Array转换为livecode中的多维数组

时间:2014-07-16 17:20:06

标签: arrays livecode

如何将像这样的数组转换为实时代码中的多维数组? 我有大约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。

2 个答案:

答案 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] 
...

此处提供更多信息:http://lessons.runrev.com/m/4071/l/12250-how-do-i-store-an-array-variable-inside-of-another-array-variable