PHP对象运算符在foreach中构建字符串?

时间:2018-03-19 11:35:55

标签: php class object

我正在尝试构建一个对象,该对象将基于迭代数组来保存多个对象:

<?php
$final_object = new stdClass();

$array = ['one','two'];

$temp_str = '';
foreach ($array as $value) {
    $temp_str .= $value . '->';
}

$temp_str = rtrim($temp_str, '->');

$final_object->$temp_str = 999;

print_r($final_object);
exit;

你可以猜到,解析器会对待' - &gt;'作为字符串文字,而不是PHP对象操作符。

我试图做的是什么?

最后,我想在json_encoding之后构建一个json字符串:{“one”:{“two”:999}}

1 个答案:

答案 0 :(得分:2)

您可以在循环期间存储对象的引用,并在结尾处分配值:

$final_object = new stdClass();

$array = ['one','two'];

$ref = $final_object ;
foreach ($array as $value) {
    $ref->$value = new stdClass() ;
    $ref = &$ref->$value ; // keep reference of last object
}
$ref = 999; // change last reference to your value

print_r($final_object);

输出:

stdClass Object
(
    [one] => stdClass Object
        (
            [two] => 999
        )
)

你可以使用数组做同样的事情:

$array = ['one','two'];
$final_object = [];
$ref =& $final_object;
foreach ($array as $value) {
    $ref[$value] = [];
    $ref =& $ref[$value];
}
$ref=999;
echo json_encode($final_object);

输出:

{"one":{"two":999}}