我的数据库中有经销商实体,每个经销商都拥有一些汽车品牌。汽车根据其功能集制作不同的价格。以下仅给出经销商对象的两个记录。我想先以最低的价格对经销商进行分类。我怎么能这样做?
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。 谢谢你的帮助。
答案 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
中的元素进行排序。
(更有效的实施方式是预先计算每个经销商的最低价格,或者用最低价格更新经销商对象,然后根据这个进行排序,而不是重新计算每个经销商的每个步骤的最低价格。排序过程。如果您的输入数组中有大量价格,您将需要这样做。)