我有以下功能可以正常工作。
function ($objects, $items = array())
{
$result = array();
foreach ($objects as $object) {
$result[$object->id] = $object->first_name . ' ' . $object->last_name;
}
return $result;
}
但是,我想将一个数组传递给$ items,并将其爆炸,这样我就不必手动指定first_name和last_name。
如果$ item只是一个值(而不是数组),那么它很简单:
$result[$object->id] = $object->$item;
但是如果$ items包含多个值并且我想用空格加入它们,我不知道如何使这个工作。类似下面的东西,但我需要在那里得到$对象
$items = array('first_name', 'last_name');
$result[$object->id] = implode(' ', $items);
答案 0 :(得分:2)
我是否认为你想使用$ item中的字符串作为$ object的属性名称?
function ($objects, $items = array())
{
$result = array();
foreach ($objects as $object) {
$valuesToAssign = array();
foreach ($items as $property) {
$valuesToAssign[] = $object->$property;
}
$result[$object->id] = implode(' ', $valuesToAssign);
}
return $result;
}
我不知道要避开第二个foreach,但这会给你想要的结果。
答案 1 :(得分:0)
不确定我是否帮了你,但是这个怎么样:
function foo($objects, $items = array()) {
$result = array();
$keys = array_flip($items);
foreach ($objects as $object) {
// Cast object to array, then omit all the stuff that is not in $items
$values = array_intersect_key((array) $object, $keys);
// Glue the pieces together
$result[$object->id] = implode(' ', $values);
}
return $result;
}