我想我可能已经阅读了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
值进行排序,但就目前而言,我决定能够对它们中的任何一个进行排序!当我使用cmp($a, $b)
尝试正常的usort
类型回调时 - 例如,在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 btw。
指导,好吗?谢谢你!
答案 0 :(得分:4)
数组中的项目是对象,而不是关联数组,因此您需要像这样引用它们:
function cmp($a, $b) {
return strcmp($a->slug, $b->slug);
}
usort($allPages, 'cmp')
答案 1 :(得分:3)
您对数组的转储表示元素是页面对象,而不是数组。您是否需要说$a->created_on
而不是$a['created_on']
?使用对象表示法而不是数组表示法。
猜猜......
答案 2 :(得分:1)
正如@Tesserex建议的那样,你需要使用对象表示法而不是数组表示法。
如果您已打开通知,则会收到有关以数组形式访问对象的错误消息。
另一件需要考虑的事情是,您的Pages并非都具有'created_on'属性,有些属性具有'published_on'属性。你必须在你的usort方法中做一些错误检查/逻辑,以确保你想要排序的密钥是可用的,并且当它没有时做一些事情。