繁体   English   中英

根据php中的嵌套键对对象数组进行排序

[英]Sorting the array of objects based on nested key in php

我的数据库中有代理商实体,每个代理商都拥有一些汽车品牌。 汽车制造商根据其功能集有不同的价格。 下面仅给出经销商对象的两个记录。 我想首先对价格最低的经销商进行排序。 我怎样才能做到这一点?

Dealer Object
    (
        [name] => Kosh Motors
        [address] => NYC
        [make] => Array
            (
                [0] => Make Object
                    (
                        [makeName] => Mercedes
                        [Prices] => Array
                            (
                                [0] =>Price Object
                                    (
                                        [makeDescription] => Some description here
                                        [price] => 12400
                                    )

                                [1] =>Price Object
                                    (
                                        [sDescription] => Variant with more features
                                        [price] => 16600

                                    )

                            )

                    )

            )

    )
    Dealer Object
    (
        [name] => Majesty Motors
        [address] => London, United Kingdom
        [make] => Array
            (
                [0] => Make Object
                    (
                        [makeName] => BMW
                        [Prices] => Array
                            (
                                [0] =>Price Object
                                    (
                                        [makeDescription] => Some description here
                                        [price] => 6400
                                    )

                                [1] =>Price Object
                                    (
                                        [sDescription] => Variant with more features
                                        [price] => 8700

                                    )

                            )

                    )

            )

    )

我已经尝试过usort,但是它不能满足我的要求。 实际上,这种嵌套对于我来说太复杂了。 我希望Majesty Motors Dealer在排序之后首先出现,因为它的价格比Kosh Motors低。 谢谢您的帮助。

因此,在您根据交易商拥有的单个最低绝对价格进行排序的情况下,您的排序功能将如下所示:

<?php

function lowestPriceForDealer($dealer)
{
    $lowest = -1;
    foreach($dealer->make as $makes) {
        foreach($makes->Prices as $price) {
            if($lowest == -1)
                $lowest = $price;
            else if($price < $lowest)
                $lowest = $price;
        }
    }

    return $lowest;
}

usort($arr, function($a, $b) {
    return lowestPriceForDealer($a) <=> lowestPriceForDealer($b);
});

这不是最有效的方法,但是会起作用。

lowestPriceForDealer返回经销商的单个最低价格。 然后, usort回调使用该回调对$arr的元素进行排序。

(一种更有效的实现方式是预先计算每个经销商的最低价格,或者用其最低价格更新经销商对象,​​然后基于此价格进行分类,而不是在分类过程的每个步骤中重新计算最低价格。如果您的输入数组中有大量价格,您将需要这样做。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM