Php 具有特定要求的关联数组排序

Php 具有特定要求的关联数组排序,php,arrays,Php,Arrays,我动态创建了以下数组 Array ( [1x2] => Array ( [AWAY] => Array ( [PL] => 1.6 [Yield] => 19.4 [YieldLS] => 19.4 [Picks] => 8 [Price] =>

我动态创建了以下数组

Array
(
 [1x2] => Array
    (
        [AWAY] => Array
            (
                [PL] => 1.6
                [Yield] => 19.4
                [YieldLS] => 19.4
                [Picks] => 8
                [Price] => 14.97
                [Stake] => 8
                [AvgStake] => 1
                [AvgOdd] => 1.87
            )

        [HOME] => Array
            (
                [PL] => 6.9
                [Yield] => 34.7
                [YieldLS] => 34.7
                [Picks] => 20
                [Price] => 38.25
                [Stake] => 20
                [AvgStake] => 1
                [AvgOdd] => 1.91
            )

        [DRAW] => Array
            (
                [PL] => 2.4
                [Yield] => 240
                [YieldLS] => 240
                [Picks] => 1
                [Price] => 3.4
                [Stake] => 1
                [AvgStake] => 1
                [AvgOdd] => 3.4
            )

        [TOTAL] => Array
            (
                [PL] => 10.9
                [Yield] => 294.1
                [YieldLS] => 294.1
                [Picks] => 29
                [Price] => 56.62
                [Stake] => 29
                [AvgStake] => 3
                [AvgOdd] => 7.18
            )

    )

[Asian Handicap] => Array
    (
        [HOME] => Array
            (
                [PL] => 41.9
                [Yield] => 9.3
                [YieldLS] => 9.3
                [Picks] => 448
                [Price] => 885.79
                [Stake] => 448
                [AvgStake] => 1
                [AvgOdd] => 1.98
            )

        [AWAY] => Array
            (
                [PL] => 31.3
                [Yield] => 7.1
                [YieldLS] => 7.1
                [Picks] => 439
                [Price] => 877.33
                [Stake] => 439
                [AvgStake] => 1
                [AvgOdd] => 2
            )

        [TOTAL] => Array
            (
                [PL] => 73.2
                [Yield] => 16.4
                [YieldLS] => 16.4
                [Picks] => 887
                [Price] => 1763.12
                [Stake] => 887
                [AvgStake] => 2
                [AvgOdd] => 3.98
            )

    )

[Over/Under] => Array
    (
        [OVER] => Array
            (
                [PL] => 14.7
                [Yield] => 10.1
                [YieldLS] => 10.1
                [Picks] => 145
                [Price] => 281.45
                [Stake] => 145
                [AvgStake] => 1
                [AvgOdd] => 1.94
            )

        [UNDER] => Array
            (
                [PL] => 14.1
                [Yield] => 19.5
                [YieldLS] => 19.5
                [Picks] => 72
                [Price] => 140.94
                [Stake] => 72
                [AvgStake] => 1
                [AvgOdd] => 1.96
            )

        [TOTAL] => Array
            (
                [PL] => 28.8
                [Yield] => 29.6
                [YieldLS] => 29.6
                [Picks] => 217
                [Price] => 422.39
                [Stake] => 217
                [AvgStake] => 2
                [AvgOdd] => 3.9
            )

    )
 )
我想要的是根据具体要求对其进行排序。例如,我需要输出为

 Array
(
 [1x2] => Array
    (
        [HOME] => Array
            (
                [PL] => 6.9
                [Yield] => 34.7
                [YieldLS] => 34.7
                [Picks] => 20
                [Price] => 38.25
                [Stake] => 20
                [AvgStake] => 1
                [AvgOdd] => 1.91
            )

         [DRAW] => Array
            (
                [PL] => 2.4
                [Yield] => 240
                [YieldLS] => 240
                [Picks] => 1
                [Price] => 3.4
                [Stake] => 1
                [AvgStake] => 1
                [AvgOdd] => 3.4
            )

        [AWAY] => Array
            (
                [PL] => 1.6
                [Yield] => 19.4
                [YieldLS] => 19.4
                [Picks] => 8
                [Price] => 14.97
                [Stake] => 8
                [AvgStake] => 1
                [AvgOdd] => 1.87
            )



        [TOTAL] => Array
            (
                [PL] => 10.9
                [Yield] => 294.1
                [YieldLS] => 294.1
                [Picks] => 29
                [Price] => 56.62
                [Stake] => 29
                [AvgStake] => 3
                [AvgOdd] => 7.18
            )

    )

[Asian Handicap] => Array
    (
        [HOME] => Array
            (
                [PL] => 41.9
                [Yield] => 9.3
                [YieldLS] => 9.3
                [Picks] => 448
                [Price] => 885.79
                [Stake] => 448
                [AvgStake] => 1
                [AvgOdd] => 1.98
            )

        [AWAY] => Array
            (
                [PL] => 31.3
                [Yield] => 7.1
                [YieldLS] => 7.1
                [Picks] => 439
                [Price] => 877.33
                [Stake] => 439
                [AvgStake] => 1
                [AvgOdd] => 2
            )

        [TOTAL] => Array
            (
                [PL] => 73.2
                [Yield] => 16.4
                [YieldLS] => 16.4
                [Picks] => 887
                [Price] => 1763.12
                [Stake] => 887
                [AvgStake] => 2
                [AvgOdd] => 3.98
            )

    )

[Over/Under] => Array
    (
        [OVER] => Array
            (
                [PL] => 14.7
                [Yield] => 10.1
                [YieldLS] => 10.1
                [Picks] => 145
                [Price] => 281.45
                [Stake] => 145
                [AvgStake] => 1
                [AvgOdd] => 1.94
            )

        [UNDER] => Array
            (
                [PL] => 14.1
                [Yield] => 19.5
                [YieldLS] => 19.5
                [Picks] => 72
                [Price] => 140.94
                [Stake] => 72
                [AvgStake] => 1
                [AvgOdd] => 1.96
            )

        [TOTAL] => Array
            (
                [PL] => 28.8
                [Yield] => 29.6
                [YieldLS] => 29.6
                [Picks] => 217
                [Price] => 422.39
                [Stake] => 217
                [AvgStake] => 2
                [AvgOdd] => 3.9
            )

    )
 )
第一级
1x2
应该是第一项,然后是
Asian disability
和最后一项
Over/Under
。同样地,在
1x2
disability
中,第二级应该是
主场、平局、客场和全场
。在
上/下
第二级中为
上下,然后为总计
。对于缺少的任何项/元素,我需要添加空记录/数组。
元素
的数量始终是固定的

失踪案例可能是这样的

 Array
(
 [1x2] => Array
    (
        [HOME] => Array
            (
                [PL] => ''
                [Yield] => ''
                [YieldLS] => ''
                [Picks] => ''
                [Price] => ''
                [Stake] => ''
                [AvgStake] => ''
                [AvgOdd] => ''
            )

         [DRAW] => Array
            (
                [PL] => 2.4
                [Yield] => 240
                [YieldLS] => 240
                [Picks] => 1
                [Price] => 3.4
                [Stake] => 1
                [AvgStake] => 1
                [AvgOdd] => 3.4
            )

        [AWAY] => Array
            (
                [PL] => 1.6
                [Yield] => 19.4
                [YieldLS] => 19.4
                [Picks] => 8
                [Price] => 14.97
                [Stake] => 8
                [AvgStake] => 1
                [AvgOdd] => 1.87
            )



        [TOTAL] => Array
            (
                [PL] => 10.9
                [Yield] => 294.1
                [YieldLS] => 294.1
                [Picks] => 29
                [Price] => 56.62
                [Stake] => 29
                [AvgStake] => 3
                [AvgOdd] => 7.18
            )

    )

[Asian Handicap] => Array
    (
        [HOME] => Array
            (
                [PL] => 41.9
                [Yield] => 9.3
                [YieldLS] => 9.3
                [Picks] => 448
                [Price] => 885.79
                [Stake] => 448
                [AvgStake] => 1
                [AvgOdd] => 1.98
            )

        [AWAY] => Array
            (
                [PL] => ''
                [Yield] => ''
                [YieldLS] => ''
                [Picks] => ''
                [Price] => ''
                [Stake] => ''
                [AvgStake] => ''
                [AvgOdd] => ''
            )

        [TOTAL] => Array
            (
                [PL] => 73.2
                [Yield] => 16.4
                [YieldLS] => 16.4
                [Picks] => 887
                [Price] => 1763.12
                [Stake] => 887
                [AvgStake] => 2
                [AvgOdd] => 3.98
            )

    )

[Over/Under] => Array
    (
        [OVER] => Array
            (
                [PL] => 14.7
                [Yield] => 10.1
                [YieldLS] => 10.1
                [Picks] => 145
                [Price] => 281.45
                [Stake] => 145
                [AvgStake] => 1
                [AvgOdd] => 1.94
            )

        [UNDER] => Array
            (
                [PL] => 14.1
                [Yield] => 19.5
                [YieldLS] => 19.5
                [Picks] => 72
                [Price] => 140.94
                [Stake] => 72
                [AvgStake] => 1
                [AvgOdd] => 1.96
            )

        [TOTAL] => Array
            (
                [PL] => 28.8
                [Yield] => 29.6
                [YieldLS] => 29.6
                [Picks] => 217
                [Price] => 422.39
                [Stake] => 217
                [AvgStake] => 2
                [AvgOdd] => 3.9
            )

    )
 )

我曾尝试使用单独的数组进行排序,但将缺少数组和排序的逻辑同时放在复杂的位置。任何帮助都将不胜感激。

我将以正确的顺序创建一个包含空记录的模板数组,然后对其进行迭代,并检查源数组是否具有相同的关联元素

如果模板项存在且不为空,请使用源替代该模板项。 如果模板是按您需要的顺序排列的,那么最后您将有一个按正确顺序填充数据的模板,如果您有空格,则将填充模板的空数据

<?php
$sourceWrongOrder = [];


$emptyRecord = [
    'PL'       => '',
    'Yield'    => '',
    'YieldLS'  => '',
    'Picks'    => '',
    'Price'    => '',
    'Stake'    => '',
    'AvgStake' => '',
    'AvgOdd'   => '',
];

$template = [
    '1x2'            =>
        [
            'HOME'  => $emptyRecord,
            'AWAY'  => $emptyRecord,
            'TOTAL' => $emptyRecord,
        ],
    'Asian Handicap' =>
        [
            'HOME'  => $emptyRecord,
            'AWAY'  => $emptyRecord,
            'TOTAL' => $emptyRecord,
        ],
    'Over/Under'     =>
        [
            'OVER'  => $emptyRecord,
            'UNDER' => $emptyRecord,
            'TOTAL' => $emptyRecord,
        ]
];

foreach ($template as $name => &$items)
{
    foreach ($items as $title => &$item)
    {
        if (isset($sourceWrongOrder[$name][$title]))
        {
            $item = $sourceWrongOrder[$name][$title]
        }
    }
}

添加了一些示例代码,但没有经过测试,您能验证一下吗?让我试试。