我有一个具有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,只使用模型中的相同方法。
由于
答案 0 :(得分:3)
我会使用array_map
:
$myObjectsIds = array_map(function($item) {
return $item->id;
}, $myObjects);
答案 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接口,因此它的行为类似于数组。