对包含年、月和日值的行的2d数组进行排序



我生成一个数组,其中包含重新排列的日期值

$totert = [
    ['2011', '07', '25'],
    ['2011', '07', '27'],
    ['2011', '06', '25'],
    ['2011', '06', '02'],
    ['2011', '05', '25'],
    ['2011', '05', '15']
];

预期结果:

[
    ['2011', '05', '15'],
    ['2011', '05', '25'],
    ['2011', '06', '02'],
    ['2011', '06', '25'],
    ['2011', '07', '27'],
    ['2011', '07', '25']
]

使用usort()并提供自定义比较功能。

$totert = array(
    array('2011','07','25'), 
    array('2011','07','27'), 
    array('2011','06','25'), 
    array('2011','06','02'), 
    array('2011','05','25'), 
    array('2011','05','15')
);
usort($totert, function($a, $b) {
    return (int)implode('', $a) - (int)implode('', $b);
});
print_r(array_map(function($v) {
    return implode('-', $v);
}, $totert));
$timestamps = array_map (function ($date) {
  return mktime(0,0,0, $date[1], $date[2], $date[0]);
}, $totert;
sort($timestamps);

这些值现在是UNIX时间戳,但使用date()可以很容易地再次创建任何您喜欢的格式。

另一种解决方案是使用简单的字符串比较

$dates = array_map (function ($date) {
  return implode('-', $date);
}, $totert;
sort($dates, SORT_STRING);

如果确实需要将日期作为数组,则可以再次拆分(explode()(-处的单个值。

    $totert = array(  
 array('2011','07','25'), 
 array('2011','07','27'), 
 array('2011','06','25'), 
 array('2011','06','02'), 
 array('2011','05','25'), 
 array('2011','05','15'));
function convert_to_date(&$item, $key)
{
    $item = $item[0].'-'.$item[1].'-'.$item[2];
}
array_walk($totert, 'convert_to_date');
sort($totert);
print_r($totert);

sort()非常适合对日期值的行进行排序,因为每行的长度相等,并且列按";big endian"时尚

代码:(演示(

sort($totert);

相关内容

  • 没有找到相关文章