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

2番目の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 に答える