如何在PHP中提取JSON对象中的对象并为其分配正确的索引
我有以下PHP代码(我将发布其中的重要部分): 因此,我需要解决的基本问题如下:如何在PHP中提取JSON对象中的对象并为其分配正确的索引,php,json,Php,Json,我有以下PHP代码(我将发布其中的重要部分): 因此,我需要解决的基本问题如下: 正确获取项目列表的正确代码是什么 我的Users.json文件中每个对象内部的“指针”对象 我试图跟踪我的foreach循环的索引,但它不能正常工作,正如您在上面发布的echo中所看到的,当我第一次执行PHP代码时,我得到了我的第一个对象的JSON字符串,我没有得到任何print\r()。然后,当我第二次刷新页面时,我会得到第一个对象的objID字符串的打印,同样,如果我第三次刷新页面,我会得到第二个对象的objI
Users.json
文件中每个对象内部的“指针”对象foreach
循环的索引,但它不能正常工作,正如您在上面发布的echo
中所看到的,当我第一次执行PHP代码时,我得到了我的第一个对象的JSON字符串,我没有得到任何print\r()。然后,当我第二次刷新页面时,我会得到第一个对象的objID
字符串的打印,同样,如果我第三次刷新页面,我会得到第二个对象的objID
,而json文件中存储了3个对象。等等,换句话说,我从来没有得到第一个对象的打印信息我做错了什么?您正在以字符串而不是变量的形式传递
$I
。使用双引号(“
)或删除单引号(”
)作为变量传递。这将解决指针对象无法正确打印的问题
$obj['pointer'][$i]['objID']
更新
[{"objID":"VUDjCZX8QX","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"mark","createdOn":"2018-09-17 05:36:49","updatedOn":"2018-09-17 05:36:49","number":111,"boolean":true,"array":["john","sarah"]},{"objID":"1uWH17OoJP","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"mark","createdOn":"2018-09-17 05:36:51","updatedOn":"2018-09-17 05:36:51","number":111,"boolean":true,"array":["john","sarah"]},{"objID":"RkubyQPvqR","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"mark","createdOn":"2018-09-17 05:36:54","updatedOn":"2018-09-17 05:36:54","number":111,"boolean":true,"array":["john","sarah"]}]
根据上面的JSON字符串,您不需要指定$i
$obj['pointer']['objID']
应该可以工作,因为它是关联数组。多亏了@saumini-navaratnam,我必须使用以下foreach
:
foreach($jsonObjs as $i=>$obj) {
print_r('<br><br>'.$i.'-- ');
echo
$obj['objID'].', '
.$obj['pointer']['objID']. ', '
.$obj['pointer']['type']. ', '
.$obj['pointer']['className']. '<br><br>'
;
}
事实上,这是我得到的回音:
[
{"objID":"pkO8NesS5S","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"bobby","createdOn":"2018-09-17 07:03:27","updatedOn":"2018-09-17 07:03:27","number":111,"boolean":true,"array":["john","sarah"]},
{"objID":"rdwJl20krC","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"bobby","createdOn":"2018-09-17 07:03:31","updatedOn":"2018-09-17 07:03:31","number":111,"boolean":true,"array":["john","sarah"]},
{"objID":"3WspzmuwMK","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"bobby","createdOn":"2018-09-17 07:07:39","updatedOn":"2018-09-17 07:07:39","number":111,"boolean":true,"array":["john","sarah"]}
]
0-- pkO8NesS5S, dgFg45dG, __pointer, Users
1-- rdwJl20krC, dgFg45dG, __pointer, Users
2-- 3WspzmuwMK, dgFg45dG, __pointer, Users
不,抱歉,它打印相同的结果,我甚至用$obj['pointer'][$I]['objID']尝试过,没有积极的结果:(@xscoder我已经更新了答案。请不要使用
$I
尝试。非常感谢,你是对的,现在它工作了,我还编辑了我的答案,以便通过将代码移到echo$jsonData之后来修复索引打印
foreach($jsonObjs as $i=>$obj) {
print_r('<br><br>'.$i.'-- ');
echo
$obj['objID'].', '
.$obj['pointer']['objID']. ', '
.$obj['pointer']['type']. ', '
.$obj['pointer']['className']. '<br><br>'
;
}
{"pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"}
[
{"objID":"pkO8NesS5S","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"bobby","createdOn":"2018-09-17 07:03:27","updatedOn":"2018-09-17 07:03:27","number":111,"boolean":true,"array":["john","sarah"]},
{"objID":"rdwJl20krC","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"bobby","createdOn":"2018-09-17 07:03:31","updatedOn":"2018-09-17 07:03:31","number":111,"boolean":true,"array":["john","sarah"]},
{"objID":"3WspzmuwMK","pointer":{"type":"__pointer","objID":"dgFg45dG","className":"Users"},"string":"bobby","createdOn":"2018-09-17 07:07:39","updatedOn":"2018-09-17 07:07:39","number":111,"boolean":true,"array":["john","sarah"]}
]
0-- pkO8NesS5S, dgFg45dG, __pointer, Users
1-- rdwJl20krC, dgFg45dG, __pointer, Users
2-- 3WspzmuwMK, dgFg45dG, __pointer, Users