開發時經常運行的模式之一是試圖從對象集合中收集列/屬性值到數組中。例如:將列值收集到數組中
$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