检索对象数组的键

时间:2017-03-17 13:56:37

标签: php oop

我有一个具有2个属性的对象:id和name(类名:MyObject):

class MyObject {
  public id;
  public name;
}

我有一个阵列" MyObjects"其中每个项目都是MyObject实例。

我循环遍历此数组以在一个视图中显示所有对象(MVC Web应用程序)。

在另一个地方(视图外部和控制器(验证类))我需要一个只包含所有对象的ID的数组。我现在正在做的只是在控制器中使用一个私有方法来遍历" MyObjects"再次将ID放在一个数组中:

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

      return $myObjectsIds;
   }

我的问题: 有没有更好的方法来检索所有对象的ID作为数组? 我不觉得这是控制器的工作,我宁愿不在模型的新属性中保存MyObjects,只使用模型中的相同方法。

由于

2 个答案:

答案 0 :(得分:3)

我会使用array_map

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

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

答案 1 :(得分: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接口,因此它的行为类似于数组。