2

我有以下工作正常的功能。

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 包含多个值并且我想用空格连接它们,我不知道如何使这项工作。类似于以下内容,但我需要在其中获取 $object

$items = array('first_name', 'last_name');
$result[$object->id] = implode(' ', $items);
4

2 回答 2

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,但这会给你想要的结果。

于 2012-08-12T09:51:34.987 回答
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;
}

演示:http ://codepad.viper-7.com/l8vmGr

于 2012-08-11T22:17:29.470 回答