2012-06-12 171 views
0

我需要通过变量'i_lastname'对这个多维php对象进行排序。按值排序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

你试过usort吗?没有尝试过自己,但我看到它建议一次:) –

+0

如果你同意擦我的警察记录,我可以发送codez :) – goat

+0

所以我想你正在尝试排序'subject'子阵列 - 什么是你传递给'usort()'?整个结构还是子阵列? – DaveRandom

回答

1

你应该使用['...']而非->... - 你处理数组,而不是对象。

你的回调应该是这样的:

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

任何strcmpstrcasecmpstrnatcmpstrnatcasecmp应该可以正常工作,您只需要决定哪一个最适合你在做什么。

+0

仍然没有正确排序。我不应该指定“i_lastname”在“主题”数组内吗? –

+0

是的。您必须告诉它在哪里可以找到要搜索的内容。所以它更像'$ a ['subject'] [0] ['i_lastname']'。 –

+0

为什么$ a ['subject'] [0] ['i_lastname']中的[0]? –