php сортирует многомерный массив Array по конкретным ключам - PullRequest
1 голос
/ 30 августа 2011

Я пытаюсь отсортировать этот массив по массиву [key] ['premium'] ['Monthly'], и если есть две одинаковые месячные цены, то сортируем по квартальным, затем полугодовым, затем годовым.

Я ищу и не могу понять, как использовать функцию array_multisort.

Array (
[0] => Array (
    [product_id] => 1
    [rate] => 27.07
    [premium] => Array (
        [Annual] => 436.05
        [Semi-Annual] => 226.75
        [Quarterly] => 115.6
        [Monthly] => 37.11
    )
)
[1] => Array (
    [product_id] => 2
    [rate] => 35.00
    [premium] => Array (
        [Annual] => 565
        [Semi-Annual] => 293.8
        [Quarterly] => 149.73
        [Monthly] => 50.85
    )    
)
[2] => Array (
    [product_id] => 3
    [rate] => 30.52
    [premium] => Array (
        [Annual] => 497.8
        [Monthly] => 47.29
    )
)
)

1 Ответ

1 голос
/ 30 августа 2011

Я думаю, вы хотите использовать функцию usort , что-то вроде

function compare($a, $b){
  $p1 = $a["premium"];
  $p2 = $b["premium"];
  if($p1["Monthly"] == $p2["Monthly"]){
     // compare by quarterly
     ...
  }else{
     if($p1["Monthly"] < $p2["Monthly"])then return -1;
     else return 1;
  }
}

usort($prices, "compare");

, где $prices - ваш массив. Функция сравнения не реализована полностью, просто чтобы показать идею. Кроме того, поскольку похоже, что в ценовом массиве могут отсутствовать элементы (т. Е. Последний пропускает квартальные и полугодовые данные), необходимо сначала проверить (до сравнения), существуют ли элементы, и предпринять соответствующие действия в случае отсутствия одного или обоих элементов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...