【问题标题】:How to sort an array with date value如何使用日期值对数组进行排序
【发布时间】:2026-02-03 12:50:01
【问题描述】:

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

$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')
);

我的意思是如何根据日期排列值

  • 2011-05-15
  • 2011-05-25
  • 2011-06-02
  • 2011-06-25
  • 2011-07-25
  • 2011-07-27

谁能帮帮我

【问题讨论】:

标签: php arrays sorting date multidimensional-array


【解决方案1】:
    $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);

【讨论】:

  • 您正在将字符串转换为整数(隐式),然后计算整数时间戳,最后使用date 函数计算回原始字符串。这是一个相当大的开销,因为您只需连接字符串即可达到完全相同的效果:return "$item[0]-$item[1]-$item[2]"。顺便说一句,您缺少 return 声明。
  • 是的,感谢您的建议,用$item = $item[0].'-'.$item[1].'-'.$item[2]; 替换函数中的行将输出相同的结果。但是这里不需要return 声明,因为我是取数组项引用,会直接修改数组项。
【解决方案2】:
$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()) - 的单个值。

【讨论】:

  • 在 PHP 5.3 中工作。在 PHP 5.2 及之前的版本中,必须正常定义函数,并且必须将字符串传递给 array_map(只是为了完整起见)。
【解决方案3】:

使用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));

【讨论】:

  • 如果在排序后需要$totert 完好无损,请使用此解决方案,但如果这没关系,请使用 KingCrunch 的解决方案。使用内置的sort() 函数比使用usort() 函数更快。
最近更新 更多