【问题标题】:Sort php multidimensional array by value按值对php多维数组进行排序
【发布时间】:2012-06-15 11:07:21
【问题描述】:

我需要通过变量“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
                (
                )
        )
)

【问题讨论】:

  • 你试过usort吗?自己没试过,但是看到推荐过一次:)
  • 如果你同意擦除我的警察记录,我可以发送密码 :)
  • 所以我猜您正在尝试对 subject 子数组进行排序 - 您将什么传递给 usort()?整个结构还是子数组?

标签: php arrays sorting object multidimensional-array


【解决方案1】:

您应该使用['...'] 而不是-&gt;... - 您处理的是数组,而不是对象。

您的回调应如下所示:

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

strcmpstrcasecmpstrnatcmpstrnatcasecmp 中的任何一个都可以正常工作,您只需要决定哪一个最适合您的工作。

【讨论】:

  • 仍然无法正确排序。我不应该指定“i_lastname”在“主题”数组中吗?
  • 是的。您必须告诉它在哪里可以找到要搜索的内容。所以它更像是$a['subject'][0]['i_lastname']
  • 为什么 $a['subject'][0]['i_lastname'] 中的 [0]?
  • 因为subject 是一个有多个主题的索引数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多