【问题标题】:transform an Array into a multidimensional Array in livecode在 livecode 中将数组转换为多维数组
【发布时间】:2014-07-16 17:20:06
【问题描述】:

如何在 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。

【问题讨论】:

    标签: arrays livecode


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      基本上,您只需将一个数组放入另一个数组。以下原则适用于我。

      //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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-26
        • 2019-06-29
        • 2017-09-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多