給定對象$obj
,如何設置$obj->foo[4]->bar[2]->fee->fi->fo->fum
等於「hello」,並創建父對象數組和對象如果它們當前不存在?設置父對象最初可能不存在的PHP對象屬性
給定對象$obj
和字符串foo[4]->bar[2]->fee->fi->fo->fum
,有沒有類似的方法嗎?
給定對象$obj
,如何設置$obj->foo[4]->bar[2]->fee->fi->fo->fum
等於「hello」,並創建父對象數組和對象如果它們當前不存在?設置父對象最初可能不存在的PHP對象屬性
給定對象$obj
和字符串foo[4]->bar[2]->fee->fi->fo->fum
,有沒有類似的方法嗎?
這是一個建議,它的工作原理,不確定是否它是更優雅,但工程:
$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);
謝謝Eduardo,不是那麼不雅。我實際上想出了一些類似但不太優雅的東西。不過,我認爲這不太合適。 http://www.tehplayground.com/#1vtzImU1W – user1032531
是的,注意到數組的問題,我現在正在檢查它 – Eduardo
已修復,請檢查 – Eduardo
差不多偷走了達倫的想法,但增加了一個@
字符。仍然不喜歡壓制任何形式的錯誤或警告的想法。如果路徑是以字符串的形式給出的,那麼如何訪問這個附加問題就沒有解決,但這不是主要問題。
<?php
$obj = new stdClass();
@$obj->foo[4]->bar[2]->fee->fi->fo->fum = 'hello';
echo($obj->foo[4]->bar[2]->fee->fi->fo->fum);
什麼?你想動態創建所述對象?您只需要:'$ 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
@達倫我有一個現有的對象,並希望添加或修改給定的屬性。 – user1032531
@Darren我認爲我會得到某種「屬性或索引未設置錯誤」。我會測試這樣做,但沒想到它會那麼容易。 – user1032531