【问题标题】:How should I sort this array by key with usort?我应该如何使用 usort 按键对该数组进行排序?
【发布时间】:2011-08-20 09:59:46
【问题描述】:

我想我可能已经阅读了 StackOverflow 上的每一篇 usort 文章,但我无法完成这篇文章。可能usort 不是我需要的工具?这是我正在使用的数组的一部分(我已将其分配给$allPages):

Array
(
    [0] => Page Object
        (
            [id] => 4
            [slug] => articles
            [created_on] => 2009-08-06 07:16:00
        )

    [1] => Page Object
        (
            [id] => 99
            [slug] => a-brief-history
            [created_on] => 2011-04-25 12:07:26
        )

    [2] => Page Object
        (
            [id] => 98
            [slug] => we-arrive
            [created_on] => 2011-04-24 13:52:35
        )

    [3] => Page Object
        (
            [id] => 83
            [slug] => new-year
            [created_on] => 2011-01-02 14:05:12
        )
)

我最终尝试对 created_on 值进行排序,但目前,我决定能够对其中任何一个进行排序!当我尝试使用usort 进行正常的cmp($a, $b) 类型回调时——例如,在this answer on a usort question 中——我只是得到一个空白。示例:

function cmp($a, $b) {
  return strcmp($a["slug"], $b["slug"]);
}
usort($allPages, 'cmp')

print_r 什么也没给我。这是 PHP 5.2.n,而不是 5.3 顺便说一句。

请指导?谢谢!

【问题讨论】:

  • created_on 值是什么意思。

标签: php arrays multidimensional-array key usort


【解决方案1】:

您在数组中的项目是对象,而不是关联数组,因此您需要像这样引用它们:

function cmp($a, $b) {
  return strcmp($a->slug, $b->slug);
}
usort($allPages, 'cmp')

【讨论】:

  • PHP 使用箭头,而不是句点。但想法是一样的。
  • 哈哈,抱歉,我每天都在使用 PHP 和 Ruby,当我切换得如此之快时,有时会混淆它们。固定。
  • 破解了它!有点像“doh!”我的时刻。非常感谢!
【解决方案2】:

您的数组转储表明元素是页面对象,而不是数组。碰巧,你需要说$a->created_on而不是$a['created_on']吗?使用对象表示法而不是数组表示法。

只是猜测......

【讨论】:

  • 是的,感谢您轻推凯利的代码。当我能够回到这个问题时,它已经修复了。 :)
【解决方案3】:

正如@Tesserex 建议的那样,您需要使用对象表示法而不是数组表示法。

如果您打开了通知,您会收到有关以数组形式访问对象的错误消息。

要考虑的另一件事是,您的页面并非都具有“created_on”属性,有些页面具有“published_on”属性。您必须在您的 usort 方法中进行一些错误检查/逻辑,以确保您想要排序的键可用,并在它不可用时执行某些操作。

【讨论】:

  • 感谢您对错误消息的提醒。在这段代码所针对的环境中,打开错误报告是一件痛苦的事,但我应该不厌其烦。并且很好地抓住了不同的日期属性:事实上,它们都有。这只是我在修剪此处展示的对象时的错误。
  • error_reporting(E_ALL);ini_set('display_errors', 'on'); 应该在大多数情况下工作。不是很知名的方法\:
猜你喜欢
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2023-03-31
相关资源
最近更新 更多