2012-05-17 3 views
0

фонда несколько функций для сортировки массива, но ни один из них не может сортировать их, если они StdClass объекта или объявление не менее я не мог найти правильный одинСортировка многомерного массива по значению, combinded с StdClass объекта

Мне нужно сортировать этот массив по порядковому значению

[data] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 12 
          [name] => Title1 
          [ordering] => 1 
         ) 

        [1] => stdClass Object 
         (
          [id] => 14 
          [name] => Title2 
          [ordering] => 3 
         ) 

        [2] => stdClass Object 
         (
          [id] => 18 
          [name] => Title4 
          [ordering] => 2 
         ) 

        [3] => stdClass Object 
         (
          [id] => 22 
          [name] => Title5 
          [ordering] => 4 
         ) 

       ) 

всякая помощь приветствуется. Спасибо!

ответ

3

Определите пользовательскую функцию сортировки на основе поля ordering ваших объектов, а затем передайте его с помощью usort.

docs for usort

function sortByOrdering($obj1, $obj2) { 
    return $obj2->ordering - $obj1->ordering; 
} 

usort($input['data'], 'sortByOrdering'); 

Обратите внимание, что вам не нужно переназначить $input = usort(...) как массив ссылки внутри usort

+0

спасибо. это сработало хорошо! – Benn

0

Спасибо, SiGanteng! Это то, что я искал.

Я отметил, что результирующий порядок сортировки был нисходящим. Я был в состоянии отменить, что с помощью простого изменения в вашу функцию - я сменил $ obj1 и $ obj2 на операторе возврата:

return $obj1->ordering - $obj2->ordering; 

В моем приложении, данные массива был:

Array 
(
    [3] => stdClass Object 
     (
      [term_id] => 3 
      [name] => Salesperson 
      [slug] => 01-salesperson 
      [term_group] => 0 
      [term_order] => 0 
      [term_taxonomy_id] => 3 
      [taxonomy] => skill 
      [description] => 
      [parent] => 0 
      [count] => 6 
      [object_id] => 53 
     ) 

    [5] => stdClass Object 
     (
      [term_id] => 5 
      [name] => Airport Security 
      [slug] => 02-airport-security 
      [term_group] => 0 
      [term_order] => 0 
      [term_taxonomy_id] => 5 
      [taxonomy] => skill 
      [description] => 
      [parent] => 0 
      [count] => 30 
      [object_id] => 575 
     ) 

    [4] => stdClass Object 
     (
      [term_id] => 4 
      [name] => Baker 
      [slug] => 03-baker 
      [term_group] => 0 
      [term_order] => 0 
      [term_taxonomy_id] => 4 
      [taxonomy] => skill 
      [description] => 
      [parent] => 0 
      [count] => 28 
      [object_id] => 453 
     ) 
) 

Использования приведенные выше данные, мне нужно было направить массив $ skills_nav в порядке возрастания по значению «slug». Вот окончательный код, который выполнил задачу:

function sortByOrdering($obj1, $obj2) { 
    return $obj1->slug - $obj2->slug; 
} 
usort($skills_nav, 'sortByOrdering'); 

Для дальнейшего объяснить читателю, два аргумента, ожидаемые функции sortByOrdering автоматически поставляются USORT. Это объясняется функцией USORT в руководстве.