【问题标题】:sorting multiple arrays by date [duplicate]按日期对多个数组进行排序[重复]
【发布时间】:2018-02-09 11:00:26
【问题描述】:

您好,我有一个数组列表,我使用 foreach 循环获取了这些数组,每个循环都包含一个日期。

我想做另一个 foreach 循环来输出每个数组,但要根据日期对它们进行排序。

目前正在输出:

Array
(
    [0] => 31.08.2016
    [1] => prize10
)
Array
(
    [0] => 31.07.2017
    [1] => prize10
)
Array
(
    [0] => 31.08.2017
    [1] => prize6
)
Array
(
    [0] => 21.08.2017
    [1] => prize6
)

我的代码是:

foreach ( $unclaimed_users  as $unclaimed_user ) {
   $a = get_user_meta($unclaimed_user->ID , "unclaimed");
   $unserialized = unserialize($a[0]);
  //echo $unserialized[0]; //Date
  //echo $unserialized[1]; //Prize

    print_r($unserialized);
}

但是这些没有特定的顺序,我怎样才能让它们根据最近的日期输出

【问题讨论】:

  • 是那些都是单独的数组还是数组的数组

标签: php arrays database sorting date


【解决方案1】:

您可以使用usort:

function sort_date($a, $b)
{
    $d1 = strtotime($a[0]);
    $d2 = strtotime($b[0]);
    return $d2 - $d1;
}

$array = [['31.08.2016', 'prize10'], ['31.07.2017', 'prize10'], ['31.08.2017', 'prize6'], ['21.08.2017', 'prize6']];

usort($array, 'sort_date');

print_r($array);

给予:

Array
(
    [0] => Array
        (
            [0] => 31.08.2017
            [1] => prize6
        )

    [1] => Array
        (
            [0] => 21.08.2017
            [1] => prize6
        )

    [2] => Array
        (
            [0] => 31.07.2017
            [1] => prize10
        )

    [3] => Array
        (
            [0] => 31.08.2016
            [1] => prize10
        )

)

【讨论】:

  • 那么我如何将它们的值转换为你所说的变量:$array = [['31.08.2016', 'prize10'], ['31.07.2017', 'prize10'], ['31.08.2017', 'prize6'], ['21.08.2017', 'prize6']];
  • $unserialized[] = unserialize($a[0])。我以为你得到了这些,我就直接去分类了
  • Sorr yim 努力完成这项工作,您能否将其合并到我上面的代码中
【解决方案2】:

首先,我认为你需要像这样合并你的数组:

foreach $arrays as $array) {
    $merged[] = array(date('Y-m-d', strtotime($array[0])) => $array[1];
}

在这里你会得到这个:

Array (
    [2016-08-31] => prize10
    [2017-31-07] => prize10
    [2017-31-08] => prize6
    [2017-21-08] => prize6
)

之后,你就可以对其进行排序并轻松使用了!

例如要获取日期和值,请使用:

foreach($merged as $date => $prize) {
    echo $date . ':' . $prize;
}

要对数组进行排序,请使用 ksort($merged);更多信息在这里:http://php.net/ksort

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-25
    • 2013-04-23
    • 2013-05-10
    • 2013-04-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多