如何用id分隔两个数组

时间:2014-10-09 10:03:12

标签: php arrays

我有一个数组,我希望通过TNXID.by将任何php函数单独数组由TXNID分成单个数组到单个数组变量。因为我想用父TXNID和子TXNID保存数组save..My演示代码是

Array
(
    [XYX] => Array
        (
            [0] => Array
                (
                    [TXNObjectType] => 102
                    [CustomerAccountID] => 951
                    [ParentTXNLineNumber] => 1
                    [TXNID] => 11

                )

            [1] => Array
                (
                    [TXNObjectType] => 84
                    [CustomerAccountID] => 951
                    [ParentTXNLineNumber] => 1
                    [TXNID] => 12

                )

        )

    [XYZ] => Array
        (
            [0] => Array
                (
                    [TXNID] => 11
                    [LineNo] => 7
                    [BranchID] => 164

                )

            [1] => Array
                (
                    [TXNID] => 11
                    [LineNo] => 8
                    [BranchID] => 164

                )

            [2] => Array
                (
                    [TXNID] => 12
                    [LineNo] => 9
                    [BranchID] => 164

                )

            [3] => Array
                (
                    [TXNID] => 12
                    [LineNo] => 10
                    [BranchID] => 164

                )

        )

)

预期产出:

Array(

   Array
    (
        [XYX] => Array
            (
                [0] => Array
                    (
                        [TXNObjectType] => 102
                        [CustomerAccountID] => 951
                        [ParentTXNLineNumber] => 1
                        [TXNID] => 11

                    )
       )
   )

   Array(
    [XYZ] => Array
           (
                [0] => Array
                    (
                        [TXNID] => 11
                        [LineNo] => 7
                        [BranchID] => 164

                    )

                [1] => Array
                    (
                        [TXNID] => 11
                        [LineNo] => 8
                        [BranchID] => 164

            )
    )
)


Array(

   Array
    (
        [XYX] => Array
            (
                [0] => Array
                    (
                        [TXNObjectType] => 102
                        [CustomerAccountID] => 951
                        [ParentTXNLineNumber] => 1
                        [TXNID] => 12

                    )
       )
   )

   Array(
    [XYZ] => Array
           (
                [0] => Array
                    (
                        [TXNID] => 12
                        [LineNo] => 7
                        [BranchID] => 164

                    )

                [1] => Array
                    (
                        [TXNID] => 12
                        [LineNo] => 8
                        [BranchID] => 164

            )
    )
)

所以请为此建议适当的解决方案。

1 个答案:

答案 0 :(得分:0)

我会尝试给你一个关于我如何去做的方法。在这里,您需要在重新排列嵌套数组时处理两个键。首先是标有XYXXYZ的最外面的键,依此类推。第二个是子数组的关键,即TXNID

所以,最初你可以遍历数组并将其变换(变平)为这种形式:

 Array
( [0] => Array
            (
                [TXNObjectType] => 102
                [CustomerAccountID] => 951
                [ParentTXNLineNumber] => 1
                [TXNID] => 11
                [Parent] => XYX //Store the parent at the same level

            )

        [1] => Array
            (
                [TXNObjectType] => 84
                [CustomerAccountID] => 951
                [ParentTXNLineNumber] => 1
                [TXNID] => 12
                [Parent] => XYX //Store the parent at the same level
            )
      ...

完成此操作后,您可以根据键TXNID对数组数组进行排序。为此,您可能希望使用uasort。你必须为此定义一个自定义比较器,应该是一个有趣的练习。

对阵列数组进行排序后。您只需要最后一次遍历此数组并对其进行解压缩,方法是检查Parent键并将数组元素作为key推入,并将排序后的数组作为值返回一个像你想要的嵌套输出。

array中的several个其他PHP函数可能会派上用场。这可能不是最有效的解决方案,但我希望它能让你开始朝着正确的方向前进。