在php中对多维数组进行排序

问题描述 投票:0回答:1

PHP

格式:$salesData["suppliers"][$supplierkey]['sales'][$salesPeriod]['sales']

我想排序(描述):

键 $salesData["suppliers"][$supplierkey] 由 $salesData["suppliers"][$supplierkey]['sales'][0]['cost'] 中填充的数值

所以在这个例子中:

$salesData["供应商"][董] $salesData["供应商"][丁]

将更改为:

$salesData["供应商"][丁] $salesData["供应商"][董]

因为

$salesData["供应商"][丁][销售额][0][成本] = 231.0600 $salesData["供应商"][Dong][销售额][0][成本] = 92.8900

是否可以在多维数组上完成

我想我需要如何使用 array_multisort ?

如有任何建议,我们将不胜感激

    Array
(
    [suppliers] => Array
        (
           
            [Dong] => Array
                (
                    [ID] => 3663313744756234943
                    [sales] => Array
                        (
                            [0] => Array
                                (
                                    [cost] => 92.8900
                                    [sales] => 180.869565
                                )

                            [1] => Array
                                (
                                    [cost] => 12.9900
                                    [sales] => 394.782609
                                )

                            [locations] => Array
                                (
                                    [salesRow] => 18
                                    [costRow] => 19
                                    [GPRow] => 20
                                    [marginRow] => 21
                                    [pSalesChangeRow] => 22
                                    [pGPChangeRow] => 23
                                    [ptotalSalesRow] => 24
                                    [ptotalGPRow] => 25
                                )

                        )

                )

            [Ding] => Array
                (
                    [ID] => 3678436471493790070
                    [sales] => Array
                        (
                            [0] => Array
                                (
                                    [cost] => 231.0600
                                    [sales] => 95.565217
                                )

                            [1] => Array
                                (
                                    [cost] => 26.8200
                                    [sales] => 85.130435
                                )

                            [locations] => Array
                                (
                                    [salesRow] => 28
                                    [costRow] => 29
                                    [GPRow] => 30
                                    [marginRow] => 31
                                    [pSalesChangeRow] => 32
                                    [pGPChangeRow] => 33
                                    [ptotalSalesRow] => 34
                                    [ptotalGPRow] => 35
                                )

                        )

                )
)
)

本网站上的其他示例显示了 1 级向下排序,但没有显示多级向下排序。

我试过了:

Foreach($salesData["suppliers"] as $supplierkey=>$id){

    $keys = array_column($salesData["suppliers"], 'cost'); 
    
    array_multisort($keys, SORT_ASC, $new); 
    
    var_dump($new);

    die();

}

但它提供了一个我认为我没有得到的错误:“成本”对吗?

php arrays sorting multidimensional-array
1个回答
0
投票

这应该很容易。首先,将所有 costs 存储在一个数组中,然后对该

costs
数组进行 排序。现在根据已排序的 suppliers
 数组
重新排序costs
 数组
类似以下内容:
function sortByCost($salesData) { // Storing the costs $costs = []; foreach ($salesData["suppliers"] as $supplierKey => $supplierData) { $costs[$supplierKey] = $supplierData["sales"][0]["cost"]; } // Sort the costs array arsort($costs); // Reordering the suppliers based on the sorting of cost array keys $sortedSuppliers = []; foreach ($costs as $supplierKey => $cost) { $sortedSuppliers[$supplierKey] = $salesData["suppliers"][$supplierKey]; } $salesData["suppliers"] = $sortedSuppliers; return $salesData; }

© www.soinside.com 2019 - 2024. All rights reserved.