开发时经常运行的模式之一是试图从对象集合中收集列/属性值到数组中。例如:将列值收集到数组中
$ids = array();
foreach ($documents as $document) {
$ids[] = $document->name;
}
我是唯一一个遇到过这个问题的人吗? PHP有办法用更少的行来解决这个问题吗?我看过但没有发现任何东西。
由于我使用的MVC框架我有机会获得其中包含真的不适合在任何特定的类常用功能BaseUtil类。由同事提出的一个解决方案是:
class BaseUtil
{
public static function collect($collection, $property) {
$values = array();
foreach ($collection as $item) {
$values[] = $item->{$property};
}
return $values;
}
}
然后,我可以这样做:
$ids = BaseUtil::collect($documents, 'name');
不是太寒酸。任何人有任何其他想法?我疯了吗?或者这看起来像是一个很久以前PHP应该解决的问题?
这对我的目的不起作用,因为我想将此概括为任何属性/属性;不只是名称。当试图做array_map()变得更加混乱,我不能得到它的工作。 – 2009-11-06 21:32:50
@JustinValentini它不必杂乱:'$ name =“foobar”; array_map(函数($ obj)use($ name){return $ obj - > {$ name};},$ documents);' – Andrea 2015-01-07 15:47:33
另外,使用'create_function'是一个坏主意。没有人再使用PHP 5.2 - 如果它们是,那是一个严重的安全问题。改为使用闭包。 – Andrea 2015-01-07 15:49:29