2012-04-25 181 views
1

你好,我想按日期排序我的對象數組,這是這樣的:PHP對象數組排序

$array = array( 
[0] = array ('date' => '2012-05-15', 'name' => 'jon') 
[1] = array ('date' => '2012-05-10', 'name' => 'jon') 
[2] = array ('date' => '2012-05-09', 'name' => 'jon') 
[3] = array ('date' => '2012-05-16', 'name' => 'jon') 
); 

我能做到這一點不知?以及我必須使用什麼方法?謝謝。

+0

你從哪裏得到數據?如果您將數據從數據庫中提取出來,則可以編輯SQL查詢。 – Ahatius 2012-04-25 05:18:46

+0

可能重複的[如何按特定鍵排序多維數組?](http://stackoverflow.com/questions/2804690/how-to-sort-a-multidimensional-array-by-a-certain-key) – deceze 2012-04-25 05:19:44

+0

你冷編輯sql查詢,按日期排序:)所以結果數據會按日期排序,如果你想升序或降序取決於你http://www.1keydata.com/sql/sqlorderby.html – SuperNoob 2012-04-25 05:25:17

回答

1

uasort()是另一種選擇。

$array = array( 
array ('date' => '2012-05-15', 'name' => 'jon'), 
array ('date' => '2012-05-10', 'name' => 'jon'), 
array ('date' => '2012-05-09', 'name' => 'jon'), 
array ('date' => '2012-05-16', 'name' => 'jon') 
); 

function date_sort($a, $b) 
{ 
    if ($a['date'] < $b['date']) return -1; 
    if ($a['date'] > $b['date']) return 1; 
    return 0; 
} 

uasort($array, 'date_sort'); 
var_dump($array); 
2

你可以使用usort()一些自定義邏輯來實現:當一切都說過和做過

$array = array(
    array('date' => '2012-05-15', 'name' => 'jon'), 
    array('date' => '2012-05-10', 'name' => 'jon'), 
    array('date' => '2012-05-09', 'name' => 'jon'), 
    array('date' => '2012-05-16', 'name' => 'jon') 
); 

function mySorter($a, $b) { 
    if ($a['date'] < $b['date']) return -1; 
    if ($a['date'] > $b['date']) return 1; 
    return 0; 
} 

usort($array, mySorter); 

$array現在看起來是這樣的:

Array 
(
    [0] => Array 
     (
      [date] => 2012-05-09 
      [name] => jon 
     ) 
    [1] => Array 
     (
      [date] => 2012-05-10 
      [name] => jon 
     ) 
    [2] => Array 
     (
      [date] => 2012-05-15 
      [name] => jon 
     ) 
    [3] => Array 
     (
      [date] => 2012-05-16 
      [name] => jon 
     ) 
)
0
$array = array(
array ('date' => '2012-05-15', 'name' => 'jon'), 
array ('date' => '2012-05-10', 'name' => 'jon'), 
array ('date' => '2012-05-09', 'name' => 'jon'), 
array ('date' => '2012-05-16', 'name' => 'jon') 

);

sort($array); 

echo '<pre>'; 
print_r($array); 
echo '</pre>'; 

使用已有的方法。

1

很明顯,usort就是答案。但是,如果你想指定的排序標準(按日期排序或按名稱排序),你可以做到以下幾點:

<?php 
$sortOrder = 'date'; // default is to sort by date 
$array = array( 
[0] = array ('date' => '2012-05-15', 'name' => 'jon') 
[1] = array ('date' => '2012-05-10', 'name' => 'jon') 
[2] = array ('date' => '2012-05-09', 'name' => 'jon') 
[3] = array ('date' => '2012-05-16', 'name' => 'jon') 
); 

function date_sort($a, $b) 
{ 
    global $sortOrder; 

    if($sortOrder == 'date') { 
     if (strtotime($a['date']) < strtotime($b['date'])) return -1; 
     if (strtotime($a['date']) > strtotime($b['date'])) return 1; 
     return 0; 
    } else if($sortOrder == 'name') { 
     return strcmp($a['name'], $b['name']); 
    } 
} 

// sorted by date 
uasort($array, 'mysort'); 


// sorted by name 
$sortOrder = 'name'; 
uasort($array, 'mysort'); 
?> 

希望這有助於。