2011-04-06 51 views
3

有沒有一種方法來破壞數組中包含的類似對象的值?我有對象的數組:Implode對象數組中的給定名稱的所有屬性 - PHP

$this->inObjs 

,我想用逗號分隔他們的每一個messageID屬性的字符串:

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

有一種優雅的方式來做到這一點還是我去必須MacGyverget_object_varsforeachs或類似的解決方案嗎?謝謝您的幫助。

回答

1
$messageIDArray; 
foreach($this->inObjs as $obj){ 
    $messageIDArray[] = $obj->messageID; 
} 

$string = implode(',',$messageIDArray); 
+0

是的最簡單的方法,那就是我想通了 - 謝謝。 – linus72982 2011-04-06 05:29:42

+0

他說他知道關於foreach – danidacar 2011-04-06 05:30:07

+0

我不知道他找到了什麼解決方案,所以我寫了我的。只是一個字foreach對我來說並不意味着什麼... – Headshota 2011-04-06 05:35:24

3
$allMessageID = ''; 
foreach ($this->inObjs as $objectDetail) : 
    $allMessageID[] = $objectDetail->messageID; 
endforeach; 

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

echo $allMessageID_implode; 
1

我通常做一個助手針對這種情況,並使用它像這樣

 

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

如果你可以修改類,可以實現__toString:

class MyObject { 
    private $messageID = 'Hello'; 
    public function __toString() { 
     return $this->messageID; 
    } 
} 
// ... 
$objectList = array(new MyObject, new MyObject); 
echo implode(',', $objectList); 
// Output: Hello,Hello 
1

這裏是兩個班輪:

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

0

,我發現使用array_map

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