2011-05-06 40 views
5

我想我可能已經閱讀StackOverflow上每usort的文章,但我不能工作了這一個。這可能是usort不是我需要的工具嗎?這裏有一個位是我的工作數組(我把它分配給$allPages):我應該如何使用usort按鍵排序該數組?

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

你是什麼created_on值的意思。 – SIFE 2011-05-06 18:46:53

回答

4

你的數組中的項目是對象,而不是關聯數組,所以你需要參考他們這樣的:

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

PHP使用箭頭,而不是句點。但這個想法是一樣的。 – Tesserex 2011-05-06 18:48:20

+0

哈哈,對不起,我每天都在使用PHP和Ruby,有時會在我切換得太快時混淆它們。固定。 – Kelly 2011-05-06 18:49:31

+0

破解它!排序「doh!」我的時刻。非常感謝! – 2011-05-06 20:27:37

3

你的陣列的轉儲說,該元素是頁面對象,不是數組。偶然的,你是否需要說$a->created_on而不是$a['created_on']?使用對象表示法而不是數組表示法。

只是猜測......

+0

是的,謝謝您推薦凱利的代碼。當我能夠回到這個時候,它就被修復了。 :) – 2011-05-06 20:28:35

1

由於@Tesserex建議,你需要使用對象符號,而不是數組符號。

如果你有注意事項開啓時,你會得到關於訪問對象作爲一個數組的錯誤消息。

另一個要考慮的是,你的頁面並不都具有「created_on」屬性,一些具有「published_on」屬性。您必須在您的usort方法內部執行一些錯誤檢查/邏輯,以確保您要排序的密鑰可用,並在不存在時執行某些操作。

+0

感謝您提供錯誤消息的提示。在這個代碼的環境中,打開錯誤報告是一件很痛苦的事情,但我應該煞費苦心。很好地抓住了不同的日期屬性:事實上,它們都有。這只是我的錯誤,在修改這裏呈現的對象。 – 2011-05-06 20:29:49

+0

'error_reporting(E_ALL);'和'ini_set('display_errors','on');'應該在大多數情況下工作。不是真正知名的方法\: – 2011-05-06 20:31:31