【问题标题】:I dont get any difference between SORT_ASC and SORT_DESC in array_multisort()我在 array_multisort() 中没有得到 SORT_ASC 和 SORT_DESC 之间的任何区别
【发布时间】:2017-11-29 20:21:21
【问题描述】:

我原来的数组是这样的:

Array
(
    [0] => Array
        (
            [validTo] => 2017-03-18T00:00:00+01:00
            [value] => 1
        )

    [1] => Array
        (
            [validTo] => 2017-06-28T00:00:00+02:00
            [value] => 1
        )

    [2] => Array
        (
            [validTo] => 2017-11-21T00:00:00+01:00
            [value] => 1
        )

    [3] => Array
        (
            [validTo] => 2017-12-24T00:00:00+01:00
            [value] => 1
        )

    [4] => Array
        (
            [validTo] => 2017-04-29T00:00:00+02:00
            [value] => 3
        )

    [5] => Array
        (
            [validTo] => 2017-11-17T00:00:00+01:00
            [value] => 3
        )

    [6] => Array
        (
            [validTo] => 2017-11-26T00:00:00+01:00
            [value] => 3
        )

)

我想按时间排序。最晚时间优先。

我看到了这个帖子questions on sort array by time in php

所以我尝试了:

// sort arr after date
foreach ($arrs as $i => $arr) {
    $time[$i] = $arr[0];
}

array_multisort($time, SORT_ASC, $arrs);

然后我得到这个输出:

Array
(
    [0] => Array
        (
            [validTo] => 2017-03-18T00:00:00+01:00
            [value] => 1
        )

    [1] => Array
        (
            [validTo] => 2017-04-29T00:00:00+02:00
            [value] => 3
        )

    [2] => Array
        (
            [validTo] => 2017-06-28T00:00:00+02:00
            [value] => 1
        )

    [3] => Array
        (
            [validTo] => 2017-11-17T00:00:00+01:00
            [value] => 3
        )

    [4] => Array
        (
            [validTo] => 2017-11-21T00:00:00+01:00
            [value] => 1
        )

    [5] => Array
        (
            [validTo] => 2017-11-26T00:00:00+01:00
            [value] => 3
        )

    [6] => Array
        (
            [validTo] => 2017-12-24T00:00:00+01:00
            [value] => 1
        )

)

这是错误的“方式”。所以我尝试了

array_multisort($time, SORT_DESC, $arrs);

但我得到相同的输出。为什么会这样,我做错了什么?

【问题讨论】:

  • 看看你的foreach,看看你在minipulating的数组键
  • 抱歉,打错了
  • $arr[0] 应该反映你的数组,你不能只是复制代码而不明白你必须改变什么
  • @nogad 我的代码现在是正确的,我只是有一个错字。我的问题是关于 SORT_ASC 和 SORT_DESC
  • 告诉我这是对的:print_r($time)

标签: php sorting


【解决方案1】:

它没有看起来那么复杂。

rsort($arrs);

会做的。

因为您要排序的键是子数组中的第一个,所以与不指定该键相比,它们应该正确地比较为小于或大于彼此。

$a = ['validTo' => '2017-03-18T00:00:00+01:00', 'value' => 1];
$b = ['validTo' => '2017-11-21T00:00:00+01:00', 'value' => 1];

assert($a < $b);

【讨论】:

  • 仅当要排序的键列在最前面时,如validTo
  • @AbraCadaver validPoint。我会将其包含在答案中。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
相关资源
最近更新 更多