【问题标题】:PHP object operator building string within foreach?PHP对象运算符在foreach中构建字符串?
【发布时间】:2018-03-19 11:35:55
【问题描述】:

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

<?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;

你可以猜到,解析器将 '->' 视为字符串文字,而不是 PHP 对象运算符。

我正在尝试做的事情可能吗?

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

【问题讨论】:

  • 是的,正如您所问的,可以“构建一个基于遍历数组来保存多个对象的对象”。但目前尚不清楚您要使用此代码做什么。看来您的问题更多是关于如何使用-&gt; 做某事。你想用它做什么?最终结果应该是什么样子?
  • 顺便说一句:循环可以替换为$temp_str = join('-&gt;', $array)
  • 我只是想在 json_encoding 之后构建一个 json 字符串到:{"one":{"two":999}}

标签: php class object


【解决方案1】:

您可以在循环期间存储对象的引用并在最后分配您的值:

$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}}

【讨论】:

  • 像魅力一样工作。谢谢第二次=)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2013-09-16
  • 2012-12-19
相关资源
最近更新 更多