2012-04-25 149 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'); 
?> 

希望这有助于。