【问题标题】:Arrange array by latest按最新排列数组
【发布时间】:2011-02-11 08:19:19
【问题描述】:
[0] => Array
    (
        [id] => 26997
        [product_id] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => 1406
                        [type_id] => 1
                        [title] => Shrek - Forever After
                        [cover] => 
                        [coverid] => 0
                        [inserted_by] => 0
                        [inserted_date] => 2011-02-11 14:28:08
                        [status_id] => 1
                    )

            )

        [variable_id] => 1
        [variable_value] => 10
        [master_value] => 
        [released_date] => 2010-12-07
        [price] => Array
            (
                [0] => Array
                    (
                        [product_id] => 1406
                        [media_format] => BLURAY
                        [price] => 349000
                        [discount] => 5
                    )

            )

    )

[1] => Array
    (
        [id] => 26678
        [product_id] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => 1375
                        [type_id] => 1
                        [title] => Shrek Quadrilogy : The Whole Story ( 4 Disc )
                        [cover] => 2066940989de9372d9c39e216430cd5a.jpg
                        [coverid] => 1051
                        [inserted_by] => 0
                        [inserted_date] => 2011-02-07 11:23:21
                        [status_id] => 1
                    )

            )

        [variable_id] => 1
        [variable_value] => 10
        [master_value] => 
        [released_date] => 2011-02-04
        [price] => Array
            (
                [0] => Array
                    (
                        [product_id] => 1375
                        [media_format] => BLURAY
                        [price] => 999000
                        [discount] => 5
                    )

            )

    )

我想按发布日期排序,如果您查看结果,我希望结果是最新的。请帮忙...

【问题讨论】:

标签: php arrays sorting


【解决方案1】:

这就是用户回调排序函数的用途

function srtReleased($a, $b) {
    $aDate = strtotime($a['released_date']);
    $bDate = strtotime($b['released_date']);
    if ($aDate == $bDate) {
        return 0;
    }
    return ($aDate > $bDate) ? -1 : 1;
}


usort($array, "srtReleased");

【讨论】:

    【解决方案2】:

    我的建议是使用 usort,就像 nikic 建议的那样。它更加优雅。另外,我不建议使用冒泡排序。唯一的好处是更容易理解。

    这是一个有人在 PHP 中实现的插入排序的链接:

    http://www.think-lamp.com/2009/08/fastest-insertion-sort-in-php/

    如果你能采用这个功能根据发布日期排序,并使用usort功能,你就成功了。

    【讨论】:

    • 解释“不起作用”是什么意思(错误?什么?)并显示你的代码...... usort() 是正确的方法......现在解释你的错误
    【解决方案3】:

    使用像Bubble Sort这样简单的东西(假设你的数组不是太大,否则你最好使用更高效的排序算法):

    for($i = 0; $i < count($myArray) - 1; $i++) {
      for($j = $i; $j < size(myArray) - 1; $j++) {
        if($myArray[$i]['released_data'] < $myArray[$j]['released_data']) {
          // Swap entries
          $tmp = $myArray[$i + 1];
          $myArray[$i + 1] = $myArray[$i];
          $myArray[$i] = $tmp;
        }
      }
    }
    

    它基本上检查下一个项目是否大于当前项目,如果是则交换它们。

    您也可以使用 usort,正如 nikic 所建议的那样。要使用它,您需要创建一个比较函数,使用与我在示例中显示的相同的比较,但包装在一个函数中。

    【讨论】:

    • 为什么不呢?这很容易理解,并且(正如我已经提到的)对于小型列表,速度损失不大。在这种情况下实现一些复杂的东西是浪费时间。并且相信 usort() 在内部也使用冒泡排序算法也不会太牵强......?
    • 我试过这个,它工作,我不能使用 usort,它说错误...非常感谢!!
    • usort() 只会在您的代码有问题时才会说错误...向我们展示代码以便我们帮助修复它,而不是简单地不使用它
    • 呵呵...我对不同编程语言的了解有时会相互交叉...(我会换个例子)
    • @Veger - 所有 PHP 的排序算法都基于快速排序的变体,而不是冒泡排序
    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 2021-03-09
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多