php - 按即将到来的日期排序

标签 php arrays sorting

所以我构建了一个包含各种日期的数组。生日、纪念日和节假日。我想对下一个发生的数组进行排序,基本上是对 10 月到 9 月进行排序(换行到明年)

所以如果我的数组是

$a = ([0]=>"1980-04-14", [1]=>"2007-06-08", 
  [2]=>"2008-12-25", [3]=>"1978-11-03")

我想对它进行排序

$a = ([0]=>"1978-11-03", [1]=>"2008-12-25", 
  [2]=>"1980-04-14", [3]=>"2007-06-08")

因为 11 月的“事件”是接下来要发生的事件(基于现在是 10 月)。

我正在尝试对我的 cmp 函数所在的位置进行排序

function cmp($a, $b)
{
  $a_tmp = split("-", $a);
  $b_tmp = split("-", $b);
  return strcmp($a_tmp[1], $b_tmp[1]);
} 

我不确定如何修改它以获得我想要的效果。

最佳答案

function relative_year_day($date) {
    $value = date('z', strtotime($date)) - date('z');

    if ($value < 0)
        $value += 365;

    return $value;
}

function cmp($a, $b)
{
    $aValue = relative_year_day($a);
    $bValue = relative_year_day($b);

    if ($aValue == $bValue)
        return 0;

    return ($aValue < $bValue) ? -1 : 1;
}

$a = array("1980-04-14", "2007-06-08",
    "2008-12-25", "1978-11-03");

usort($a, "cmp");

关于php - 按即将到来的日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/167954/

相关文章:

php - 显示来自 concat mysql 和 php 的图像

php - 尽快启动并运行高级 PHP?

c - 本指南中的 "And since arrays are actually pointers"是什么意思?

c++ - 在 C++ 中使用 sort 对索引进行排序

javascript - WooCommerce:在结帐时将输入的账单地址字段大写 + 更新订单元?

php - 如何将数组中的 true 和 false 字符串解析为 boolean 值

javascript - 通过动态更改的变量键访问对象键

c++ - C/C++ Arrays 多维数组

arrays - 相同的排序算法,相同的数组,但对同一个数组进行几次排序时给出不同的排序时间

java - 如何在 JSP 中以多种不同方式对列表进行排序?