2012-06-12 5 views
0

Мне нужно отсортировать этот многомерный php-объект по переменной «i_lastname».Сортировка многомерного массива php по значению

Я пробовал большинство примеров с usort и ksort безрезультатно. Большинство примеров похожи на это, но не будут работать для меня.

function sort_by_name($a, $b) 
{ 
    return ($a->i_lastname < $b->i_lastname ? -1 : 1); 
} 
usort($cards, 'sort_by_name'); 

Это структура объекта.

спасибо.

Array 
(
    [0] => Array 
     (
      [officer_id] => 4D5DEF60 
      [card_id] => 5 
      [general] => Array 
       (
        [0] => Array 
         (
          [i_officer_id] => 4D5DEF60 
          [i_officer_name] => 
          [i_datetime] => 2012-06-12 13:47:00 
          [i_location] => 17 Rue de Neuch, Yvette, France 
          [i_lat] => 48.6955 
          [i_lon] => 2.21458 
          [i_reason] => DUI 
         ) 
       ) 
      [subject] => Array 
       (
        [0] => Array 
         (
          [subject_id] => 6 
          [i_lastname] => Toro 
          [i_firstname] => Benicio 
         ) 
        [1] => Array 
         (
          [subject_id] => 9 
          [i_lastname] => Limon 
          [i_firstname] => Pedro 
         ) 
       ) 
      [vehicle] => Array 
       (
       ) 
     ) 

    [1] => Array 
     (
      [officer_id] => 4D5DEF60 
      [card_id] => 2 
      [general] => Array 
       (
        [0] => Array 
         (
          [i_officer_id] => 0f3b45a3 
          [i_officer_name] => 
          [i_datetime] => 2012-06-06 19:42:00 
          [i_location] => 10231 Yankee St, Miami, USA 
          [i_lat] => 39.5952 
          [i_lon] => -84.2003 
          [i_reason] => Speeding 
         ) 
       ) 
      [subject] => Array 
       (
        [0] => Array 
         (
          [subject_id] => 3 
          [i_lastname] => Doe 
          [i_firstname] => John 
         ) 
        [0] => Array 
         (
          [subject_id] => 15 
          [i_lastname] => Doe 
          [i_firstname] => Jane 
         ) 
       ) 
      [vehicle] => Array 
       (
       ) 
     ) 
) 
+0

Вы пробовали использовать? Не пробовал это сам, но я видел, как это рекомендовалось однажды :) –

+0

Я могу отправить кодз, если вы согласны стереть мою полицейскую запись :) – goat

+0

Так что, я думаю, вы пытаетесь отсортировать суб-массив 'subject' - что вы переходите к 'usort()'? Вся структура или подматрица? – DaveRandom

ответ

1

Вы должны использовать ['...'] вместо ->... - вы имеете дело с массивами, а не объектов.

Ваш обратный вызов должен выглядеть следующим образом:

return strnatcasecmp($a['i_lastname'],$b['i_lastname']); 

Любой из strcmp, strcasecmp, strnatcmp или strnatcasecmp должен работать нормально, то вам просто нужно решить, какой из них лучше работает для того, что вы делаете.

+0

Все еще не сортируется должным образом. Должен ли я указывать, что «i_lastname» находится внутри массива «subject»? –

+0

Да. Вы должны сказать, где найти, что искать. Таким образом, это будет больше похоже на '$ a ['subject'] [0] ['i_lastname']'. –

+0

Почему [0] в $ a ['subject'] [0] ['i_lastname']? –

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