Php foreach stdClass对象已转换为字符串

Php foreach stdClass对象已转换为字符串,php,string,object,foreach,stdclass,Php,String,Object,Foreach,Stdclass,我正在处理一个API的响应,该API以相当直接的结构返回JSON格式的数据。伪结构最好表示为: services -> service -> options -> option -> suboptions -> option 由于这是解码的JSON,所有这些都是stdClass对象。我有许多foreach语句迭代各种服务和选项,它们都可以正常工作。但是,当我在子选项级别使用foreach语句时,对象被序列化为字符串。对于您的信息,子选项的结构如下所示。 使用这样

我正在处理一个API的响应,该API以相当直接的结构返回JSON格式的数据。伪结构最好表示为:

services -> service -> options -> option -> suboptions -> option
由于这是解码的JSON,所有这些都是stdClass对象。我有许多foreach语句迭代各种服务和选项,它们都可以正常工作。但是,当我在子选项级别使用foreach语句时,对象被序列化为字符串。对于您的信息,子选项的结构如下所示。

使用这样的foreach时(其中$option是服务->服务->选项->选项中的一个选项)

它输出

SOME_CODESome Name
不是预期的

stdClass Object
  (
     [code] => SOME_CODE
     [name] => Some Name
  )
我不知道foreach会在深度或其他条件方面这样做的任何原因。 我已经尝试了我能想到的一切,搜索了一遍,但没有发现任何这种情况。如果有人有什么想法,我很想听听!干杯

如果有人在其他地方回答了,或者我遗漏了一些明显的东西,我会道歉。如果是的话,到目前为止我还没有意识到


编辑:对于那些提出问题的人来说,这确实是Auspest PAC API。从刚果民主共和国转移到2014年。我不能评论,因为我没有那么高的声誉,但我会尽力回答

我假设您想从PHP数组中删除stdClass

如果是这样,那么请确保在解码JSON时使用的是
true

示例:
$array=json\u decode($json,true)

有关stdClass的更多信息,请参阅此SO帖子:


同样,如果我误解了你的问题,请原谅,我只希望我可以评论…

最后一个对象的值不是数组,因此你需要键和值

foreach($option->suboptions->option as $key => $value) {
  echo '<p>KEY:'.$key.' VALUE:'.$value.'</p>';
}
foreach($option->suboptions->option as$key=>$value){
回显“KEY:”.$KEY.“VALUE:”.$VALUE.“

”; }
我假设这是来自。这个API做出了一个可怕的决定,将只有一个项的集合实例视为单个值。例如,
service->options->option
可以是数组,也可以是单个选项

我发现处理这个问题的最简单方法是将
选项
强制转换为数组,例如

$options = $service->options->option;
if (!is_array($options)) {
    $options = array($options);
}

// now you can loop over it safely
foreach ($options as $option) { ... }

您将对子选项执行相同的操作。如果您感兴趣,我有一个处理AusPost API的完整库,用于管理HTTP端。

如果您使用
var\u dump()
而不是
print\u r
,会怎么样?这是澳大利亚邮政邮资计算API吗?它确实是AusPost PAC API。var_dump()不会给你太多我能想象的东西…@NathanDabkowski我立刻认出了那可怕的结构;)我以前见过它做一些奇怪的事情,但这是新的!谢谢你指出这一点。他们需要做一些认真的工作,在整个过程中有许多小怪癖。我很想使用一个合适的库,但它的生产环境充其量是“有限的”。谢谢你的提议。@NathanDabkowski这没什么特别的。只是一堆PHP,但它会处理所有的腿部工作。你是正确的,但不幸的是,这将是一个吨更多的工作来完成的方式,API的设计和我必须返回比上述内容,但这是我考虑过的东西。
foreach($option->suboptions->option as $key => $value) {
  echo '<p>KEY:'.$key.' VALUE:'.$value.'</p>';
}
$options = $service->options->option;
if (!is_array($options)) {
    $options = array($options);
}

// now you can loop over it safely
foreach ($options as $option) { ... }