2011-11-04 65 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']); 
});