Reputation: 1004
hello I want to sort my object array by date, which is like that:
$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')
);
can I do that somehow? and what method I have to use? Thanks.
Upvotes: 1
Views: 1269
Reputation: 6003
Obviously, usort is the answer. But, if you want to specify the sorting criterion (sort by date or sort by name), you can do the following:
<?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');
?>
Hope this helps.
Upvotes: 1
Reputation: 315
$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>';
Use already existing methods.
Upvotes: 0
Reputation: 5768
uasort()
is another option.
$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);
Upvotes: 1
Reputation: 268344
You could use usort()
with some custom logic to accomplish this:
$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 );
When all is said and done, $array
now looks like this:
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 ) )
Upvotes: 2