2012-05-02 5 views
1

Найти утверждения в CakePHP создайте массив, структурированный, как показано ниже. Я уже заказал свой поиск, чтобы показать результат (упорядочено по комбинированному_сооружению). Теперь я хотел бы применить функцию сортировки данных для сортировки по «average_votes». См. «From this:»/«to this:» ниже.Как отсортировать многомерные массивы CakePHP?

Я бы очень признателен за любые предложения.

From this: 
Array 
(
[0] => Array 
    (
     [Vehicle] => Array 
      (
       [id] => 52 
       [user_id] => 101 
       [name] => Ford 
       [total_votes] => 5 
       [average_votes] => 3.8 
       [combined_score] => 19 
      ) 

    ) 

[1] => Array 
    (
     [Vehicle] => Array 
      (
       [id] => 48 
       [user_id] => 101 
       [name] => Nissan 
       [total_votes] => 6 
       [average_votes] => 5 
       [combined_score] => 2 
      ) 
    ) 
) 

To this: 
Array 
(
[0] => Array 
    (
     [Vehicle] => Array 
      (
       [id] => 48 
       [user_id] => 101 
       [name] => Nissan 
       [total_votes] => 6 
       [average_votes] => 5 
       [combined_score] => 2 
      ) 
    ) 

[1] => Array 
    (
     [Vehicle] => Array 
      (
       [id] => 52 
       [user_id] => 101 
       [name] => Ford 
       [total_votes] => 5 
       [average_votes] => 3.8 
       [combined_score] => 19 
      ) 

    ) 

) 
+0

Пожалуйста, смотрите на «Связанные» раздел справа. – Jon

+2

Почему у вас нет базы данных для сортировки? – ori

+0

Jon, какая из этих связанных ссылок показывает, как сортировать по данным 3 уровня в глубину, как показано выше? – stevenmc

ответ

2

В зависимости от того, что вы на самом деле пытаетесь достичь вы все еще можете сделать это на уровне базы данных в торте, например, так:

$this->Vehicle->find('all',array('order' => array('Vehicle.combined_score' => 'asc', 'Vehicle.average_votes' => 'desc'))); 

Что будет сортировать по комбинированный счет, а затем сортировать средними голосами

Второй вариант заключается в использовании класса CakePHP Set, например, так:

$results = Set::sort($results, '{n}.Vehicle.average_votes', 'desc'); 
2

В вашем контроллере функция поиска вы можете добавить опцию для сортировки.

$this->Vehicle->find('all',array('order' => array('Vehicle.average_votes DESC'))); 
+0

Спасибо gvLearner, но, как я уже упоминал в своем посте, мне нужно сначала отсортировать его по comb_score, а затем мне нужно взять этот набор результатов и прибегнуть к нему по средним голосам. – stevenmc

Смежные вопросы