对二维数组进行排序,其中行包含年、月、日值

发布于 2024-11-25 11:50:04 字数 419 浏览 3 评论 0原文

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

$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']
]

I generate an array with rearranged date values in it

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

Expected result:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

江挽川 2024-12-02 11:50:05
    $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);
    $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);
护你周全 2024-12-02 11:50:05

sort() 非常适合对日期值行进行排序,因为每行具有相同的长度,并且您的列以“big-endian”方式排列。

代码:(演示)

sort($totert);

sort() is perfectly suited to order your rows of date values because each row has an equal length and your columns are arranged in a "big-endian" fashion.

Code: (Demo)

sort($totert);
千紇 2024-12-02 11:50:04

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

Use usort() and provide a custom comparison function.

$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));
养猫人 2024-12-02 11:50:04
$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()) 单个值。

$timestamps = array_map (function ($date) {
  return mktime(0,0,0, $date[1], $date[2], $date[0]);
}, $totert;

sort($timestamps);

The values are now UNIX-timestamps, buts ith date() its very easy to create any format you like again.

Another solution is to use simple string comparison

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

sort($dates, SORT_STRING);

You can split (explode()) the single values at - again, if you really need the dates as an array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文