2016-08-04 25 views
0

給定對象$obj,如何設置$obj->foo[4]->bar[2]->fee->fi->fo->fum等於「hello」,並創建父對象數組和對象如果它們當前不存在?設置父對象最初可能不存在的PHP對象屬性

給定對象$obj和字符串foo[4]->bar[2]->fee->fi->fo->fum,有沒有類似的方法嗎?

+0

什麼?你想動態創建所述對象?您只需要:'$ obj = new stdClass(); $ obj-> foo [4] - > bar [2] - > fee-> fi-> fo-> fum ='hello'; var_dump($ obj-> foo [4] - > bar [2] - > fee-> fi-> fo-> fum);'? [示例](http://www.tehplayground.com/#a8ndC1gz7) – Darren

+0

@達倫我有一個現有的對象,並希望添加或修改給定的屬性。 – user1032531

+0

@Darren我認爲我會得到某種「屬性或索引未設置錯誤」。我會測試這樣做,但沒想到它會那麼容易。 – user1032531

回答

0

這是一個建議,它的工作原理,不確定是否它是更優雅,但工程:

$obj = new stdClass(); 
$stringParams = "foo[4]->bar[2]->fee->fi->fo->fum"; 
$attributes = explode("->", $stringParams); 
foreach($attributes as $attribute) { 

    $attributeBase = explode("[", $attribute); 

    if(count($attributeBase) > 1) { 
     $attributeIndex = (int)str_ireplace("]","", $attributeBase[1]); 
     $obj->$attributeBase[0] = [$attributeIndex => null]; 
    } else { 
     $obj->{$attribute} = null; 
    } 

} 

var_dump($obj); 
+0

謝謝Eduardo,不是那麼不雅。我實際上想出了一些類似但不太優雅的東西。不過,我認爲這不太合適。 http://www.tehplayground.com/#1vtzImU1W – user1032531

+0

是的,注意到數組的問題,我現在正在檢查它 – Eduardo

+0

已修復,請檢查 – Eduardo

0

差不多偷走了達倫的想法,但增加了一個@字符。仍然不喜歡壓制任何形式的錯誤或警告的想法。如果路徑是以字符串的形式給出的,那麼如何訪問這個附加問題就沒有解決,但這不是主要問題。

<?php 
$obj = new stdClass(); 
@$obj->foo[4]->bar[2]->fee->fi->fo->fum = 'hello'; 
echo($obj->foo[4]->bar[2]->fee->fi->fo->fum);