我应该如何使用 usort 按键对这个数组进行排序?
我想我可能已经阅读了 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)
类型回调时——例如,在 这个关于 usort 问题的答案 - 我刚刚得到一个 空白的。示例:
function cmp($a, $b) {
return strcmp($a["slug"], $b["slug"]);
}
usort($allPages, 'cmp')
print_r
没有给我任何结果。这是 PHP 5.2.n 的情况,而不是 5.3 顺便说一句。
请指导一下?谢谢你!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
数组中的项目是对象,而不是关联数组,因此您需要像这样引用它们:
Your items in the array are objects, not associative arrays, so you need to refer to them like this:
您的数组转储表明元素是页面对象,而不是数组。碰巧,您需要说
$a->created_on
而不是$a['created_on']
吗?使用对象表示法而不是数组表示法。只是猜测...
Your dump of the array says that the elements are Page Objects, not arrays. By chance, do you need to say
$a->created_on
instead of$a['created_on']
? Using object notation instead of array notation.Just guessing...
正如@Tesserex 所建议的,您需要使用对象表示法而不是数组表示法。
如果您打开了通知,您会收到有关以数组形式访问对象的错误消息。
另一件需要考虑的事情是,您的页面并不都具有“created_on”属性,有些页面具有“published_on”属性。您必须在 usort 方法中进行一些错误检查/逻辑,以确保您想要排序的键可用,并在不可用时执行某些操作。
As @Tesserex suggests, you need to use object notation instead of array notation.
If you had notices turned on, you'd get error messages about accessing an object as an array.
Another thing to consider, is, your Pages don't all have a 'created_on' attribute, some have a 'published_on' attribute. You'll have to do some error checking / logic inside your usort method to make sure that the key you want to sort by is available, and do something when it's not.