Внедрить все свойства данного имени в массив объекта - PHP - PullRequest
3 голосов
/ 06 апреля 2011

Есть ли способ взорвать значения аналогичных объектов, содержащихся в массиве? У меня есть массив объектов:

$this->inObjs

и я хотел бы разделить запятыми строку каждого из их messageID свойств:

$this->inObjs[$i]->messageID

Есть ли элегантный способ сделать это, или мне нужно MacGyver решение с get_object_vars или foreachs или что-то подобное? Спасибо за помощь.

Ответы [ 6 ]

3 голосов
/ 31 августа 2013

Если вы можете изменить класс, вы можете реализовать __toString:

class MyObject {
    private $messageID = 'Hello';
    public function __toString() {
        return $this->messageID;
    }
}
// ...
$objectList = array(new MyObject, new MyObject);
echo implode(',', $objectList);
// Output: Hello,Hello
3 голосов
/ 06 апреля 2011
$allMessageID = '';
foreach ($this->inObjs as $objectDetail) :
    $allMessageID[] = $objectDetail->messageID;
endforeach;

$allMessageID_implode = implode(",", $allMessageID);

echo $allMessageID_implode;
1 голос
/ 04 октября 2013

Вот два лайнера:

array_walk($result, create_function('&$v', '$v = $v->property;'));
$result = implode(',', $result);

Или:

array_walk($result, function(&$v, &$k) use (&$result) { $v = $v->name; } );
$result = implode(',', $result);

Где $v->property - имя вашего объекта для взрыва.

Также см. array_map () .

1 голос
/ 06 апреля 2011

Я обычно делаю хелпер для этой ситуации и использую его вот так


function GetProperties(array $arrOfObjects, $objectName) {
     $arrProperties = array();
     foreach ($arrOfObjects as $obj) {
         if ($obj->$objectName) {
              $arrProperties[] = $obj->$objectName;
         }
     }
     return $arrProperties;
}

1 голос
/ 06 апреля 2011
$messageIDArray;
foreach($this->inObjs as $obj){
   $messageIDArray[] = $obj->messageID;
}

$string = implode(',',$messageIDArray);
0 голосов
/ 23 января 2016

Самый простой способ, который я нашел, это использовать array_map

$messageIDs = array_map( function($yourObject) { return $yourObject->messageID; }, $this->inObjs );
$string = implode(", ", $messageIDs );
...