2017-03-17 78 views
3

我有2個屬性的對象的陣列的鍵:ID和名稱(類名:爲MyObject):檢索對象

class MyObject { 
    public id; 
    public name; 
} 

我有一個數組「MyObjects」,其中每個項目是一個爲MyObject實例。

我在這個數組中循環顯示一個視圖(MVC Web應用程序)中的所有對象。

在另一個地方(視圖和控制器(驗證類)之外),我將需要一個只包含所有對象的ID的數組。我現在正在做的僅僅是使用在控制器中循環的私有方法,通過「MyObjects」再次把IDS中的數組:

private function getMyObjectsIds($myObjects) { 
     $myObjectsIds = array(); 
     foreach ($myObjects as $myObject) { 
     $myObjectsIds[] = $myObject->id; 
     } 

     return $myObjectsIds; 
    } 

我的問題: 是否有更好的方法來檢索的ID所有的對象作爲一個數組? 我不覺得這是控制器的工作,我寧願不將MyObjects保存在模型的新屬性中,只使用模型中的相同方法。

感謝

回答

1

您可以創建如該邏輯封裝自己的 「陣列」 類。

例如:

class Collection 
{ 
    public $items; 

    public function __construct(array $items) 
    { 
     $this->items = $items; 
    } 

    public function lists($name) 
    { 
     return array_map(function ($item) use ($name) { 
      return $item->{$name}; 
     }, $this->items); 
    } 

    // Other common methods 
} 

要獲得ID列表。

$myObjects = new Collection([]); 
$ids = $myObjects->lists('id'); 

這不是一個完整的例子,因爲你還需要實現Serializable接口和Iterator接口,所以它像一個數組。

+0

非常感謝。正是我需要的。 –

3

我會用array_map它:

$myObjectsIds = array_map(function($item) { 
    return $item->id; 
}, $myObjects); 

http://php.net/manual/en/function.array-map.php

+0

我喜歡你的答案。雖然它回答了這個問題,但Kaspars的回答更加完整。 –