1 回答

TA貢獻1846條經驗 獲得超7個贊
這是解決您的問題的一種可能的解決方案。我們使用一個權重數組,其鍵與餐廳數組中的鍵和值相匹配,如您的問題所示。請注意,對于距離,我們使用負值,因為您希望更近的餐廳(距離值越?。┡琶礁摺H缓?,我們可以根據每個權重的評分總和對餐廳數組進行排序:
function get_rating($restaurant, $weights) {
$rating = 0;
foreach ($weights as $factor => $weight) {
$rating += $weight * $restaurant[$factor];
}
return $rating;
}
$weights = array('distance' => -30, 'likes' => 10);
usort($restaurants, function ($a, $b) use ($weights) {
return get_rating($b, $weights) - get_rating($a, $weights);
});
print_r($restaurants);
輸出:
Array
(
[0] => Array
(
[name] => Macdonalds
[distance] => 2
[likes] => 9
)
[1] => Array
(
[name] => Pizza Hut
[distance] => 9
[likes] => 12
)
[2] => Array
(
[name] => Burger King
[distance] => 14
[likes] => 17
)
[3] => Array
(
[name] => KFC
[distance] => 17
[likes] => 3
)
)
請注意,$restaurants您問題中的變量不是有效的 PHP 結構;我假設你有一個關聯數組。
- 1 回答
- 0 關注
- 152 瀏覽
添加回答
舉報