基于php

时间:2016-01-14 01:51:39

标签: php arrays sorting

我的数据库中有经销商实体,每个经销商都拥有一些汽车品牌。汽车根据其功能集制作不同的价格。以下仅给出经销商对象的两个记录。我想先以最低的价格对经销商进行分类。我怎么能这样做?

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,但它不符合我的要求。实际上这个嵌套对我来说太复杂了。 我希望陛下汽车经销商首先出现,因为它的价格低于Kosh Motors。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

因此,在你的情况下,排序是基于经销商的单一最低绝对价格,你的排序功能看起来像这样:

<?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中的元素进行排序。

(更有效的实施方式是预先计算每个经销商的最低价格,或者用最低价格更新经销商对象,​​然后根据这个进行排序,而不是重新计算每个经销商的每个步骤的最低价格。排序过程。如果您的输入数组中有大量价格,您将需要这样做。)