连接对象项

时间:2012-08-11 22:11:29

标签: php

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

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);

2 个答案:

答案 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;
}

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