2013-12-22 67 views
0

我是一個PHP開發人員,他通常使用數組代替對象,我想知道是否有基於關鍵值的對象操作的最佳做​​法。如何將PHP對象排列到數組中以供顯示

以下面的多維數組事件爲例,這些事件通常會直接從數據庫中提取出來。

$events = array(
    0=>array(
     'eventid'=>1, 
     'title'=>'First Event', 
     'date'=>'20131010' 
    ), 
    1=>array(
     'eventid'=>2, 
     'title'=>'Second Event', 
     'date'=>'20131022' 
    ), 
    2=>array(
     'eventid'=>3, 
     'title'=>'Third Event', 
     'date'=>'20131010' 
    ), 
), 

爲了在我的模板中進行顯示,我希望這是一個基於日期優先的多維數組。這是我使用輔助函數的相當簡單的轉換。

assoc($ events,'date','eventid');

在所得:

$events = array(
    20131010=>array(
     1 => array(
      'eventid'=>1, 
      'title'=>'First Event', 
      'date'=>'20131010' 
     ), 
     3 => array(
      'eventid'=>3, 
      'title'=>'Third Event', 
      'date'=>'20131010' 
     ), 
    ), 
    20131022=>array(
     2 => array(
      'eventid'=>1, 
      'title'=>'First Event', 
      'date'=>'20121010' 
     ), 
    ), 
), 

以這種方式,我可以很容易地通過在模板上側針對每個日期的陣列運行時,創建一個標題和該日期,然後顯示該日下方的事件。

我可以繼續嘗試爲對象創建一個類似的assoc()函數,但它觸發了我應該是一個相當普遍的事情,並且可能有一個標準的方法來做到這一點。如果你有一個對象而不是$ events的數組,那麼你會如何描述格式呢?或者你會怎樣?

另外一條信息:我使用的是CodeIgniter,如果它有一些幫助函數,我不知道這可能會有用。

+1

對於數據檢索或排序方式,對象/數組並沒有太大區別。你所做的是常見的做法,另一種選擇是在你的數據庫查詢中正確排序你的數據。 –

+0

你在說stdObject還是自定義類? –

+0

nl-x,因爲我不知道答案,我猜這是一個問題。但是,如果我var_dump,它說stdObject我相信。它是從CodeIgniter的標準活動記錄調用中檢索到的。 $ query = $ this-> db-> get('events'); return $ query-> result(); – daprezjer

回答

0

在你的assoc函數中,你可以做一個is_object檢查,如果它是一個對象,就將它轉換爲一個數組。

function your_assoc_func($events){ 
    if(is_object($events)){ 
    $events = (array)$events 
    } 

    // If the object is more complex cast any containing objects you may run across 
    foreach($events as $event){ 
    if(is_object($event)){ 
     $event = (array)$event 
    } 
    } 
} 
+0

是的,我可以很容易地做到這一點。只是不確定這是否是常見做法。 – daprezjer

+0

更具體地說,我想知道是否需要像這樣的東西時將對象更改爲數組是常見的做法。現在我更多地使用了對象,並且看到了很多東西,比如$ message-> title,這個轉換看起來很奇怪,並且突然看到$ events ['title']。 – daprezjer

+0

我明白你在說什麼 - 你傳入一個對象並取回一個數組。你可以很容易地拿着一個標誌來確保你返回一個對象。我看到的唯一的其他選擇是聲明自定義事件類並使其可迭代:http://www.php.net/manual/en/language.oop5.items.php – user2923779