2011-11-04 69 views
0

我有一个多维数组,如下所示。我想根据[date]属性对第二级数组进行排序。我相信我可以使用array_multisort,但我不确定如何继续。PHP:按属性对多维数组排序

我的阵列是在可变$presentations

Array 
(
    [0] => Array 
     (
      [date] => 20111104 
      [name] => Name of Presentation 
     ) 

    [1] => Array 
     (
      [date] => 20111118 
      [name] => sadf 
     ) 

    [2] => Array 
     (
      [date] => 20100427 
      [name] => older one 
     ) 

    [3] => Array 
     (
      [date] => 20101213 
      [name] => Another one from 2010 
     ) 

    [4] => Array 
     (
      [date] => 20110719 
      [name] => sdf 
     ) 

    [5] => Array 
     (
      [date] => 20110614 
      [name] => Sixth one 
     ) 

) 
+0

可能重复(http://stackoverflow.com/questions/2059255/sorting-multidimensional-array-in-php) –

+0

你会想用'usort()'回调。看到链接的问题。 –

+0

我检查了一下,但想在这个特定情况下得到一些帮助。我帮助我公平分享,所以请不要关闭它。 – wesbos

回答

2

usort回调应该返回3种类型的值,根据具体情况:

  • 负数如果参数$a小于$b
  • 如果参数$b小于$a
  • 为正数
  • 零,如果两个$a$b相等
usort($presentations, function($a, $b) 
{ 
    if($a['date'] == $b['date']) 
    { 
     return 0; 
    } 
    return $a['date'] < $b['date'] ? -1 : 1; 
}); 
+0

这很好,你能解释一下吗? – wesbos

+0

简单:如果它们相等,则返回0,如果小于,则返回负数,如果大于,则返回正数。这是排序算法通常的工作方式。 –

+0

@Wes:我的更新答案应该可以帮助你。 –

1

您可以使用usort()应用自定义比较函数。

usort($presentations, 
     function ($left, $right) { 
      return $left['date'] - $right['date']; 
     }); 
+0

我从来没有想过这么简单。出于习惯,我总是以两个“if”结尾。 – thetaiko

+1

@thetaiko - 是的,当你的数字减去时不会导致溢出,这很好。 –

1

这里是一个字符串实现与因类型杂耍的PHP中的整数工作:排序在PHP多维数组]的

usort($presentations, function($a, $b) { 
    return strcmp($a['date'], $b['date']); 
});