我被困在这几个小时。我需要获取数组的初始键和id。但是我只返回了1个结果。
以下是示例代码,此处还有一个链接 - https://3v4l.org/HdMtA
简而言之,预期的输出应该是。
document.addEventListener("visibilitychange", function() {
audio.pause();
});
我只得到一个结果。
key 11111111 id val_somevalue5555
key 2222222 id val_somevalue25
key 11111111 id val_somevalue5555
任何帮助将不胜感激,不确定它的格式是json还是什么。
答案 0 :(得分:1)
你正在尝试错误的事情。
使用print_r()
查看已解码数组的内容,向我们显示您要迭代的内容是 - 实际上 - 包装在另一个数组中。
print_r($jsonarr)
会返回此信息:
Array
(
[0] => Array
(
[11111111] => Array
(
[id] => val_somevalue5555
[customer] => Array
(
[32312] => Array
(
[name] => jane doe
)
)
)
[2222222] => Array
(
[id] => val_somevalue25
[customer] => Array
(
[32312234] => Array
(
[name] => jane doe
)
)
)
)
)
所以,你所拥有的是一个包装在JSON数组中的JSON对象,其中所述对象是其中唯一的项目。
你想要:
a)在JSON的开头和结尾摆脱那些[
和]
的东西,或者...... (如果你无法控制那个JSON)
b)迭代内部对象 (PHP将其表示为关联数组):
$jsonarr = json_decode($json, true);
$newarr = [];
foreach($jsonarr[0] as $key => $value) {
$newarr[] = ['key' => $key, 'id' => $value['id']];
}`
var_dump($newarr);
答案 1 :(得分:0)
更改循环以使用foreach循环本身的键:像这样
foreach($jsonarr as $key => $value)
{
$newarr[] = ['key' => $key, 'id' => $value[$key]['id']]; //this seems off but what do I know.
}
PHP为Foreach使用数组的副本(或引用?),它可以产生一些意想不到的事情。它有时会做一些幽灵般的伏都教的东西,如果你曾尝试编辑阵列结构,同时在foreach中使用引用,例如foreach($var as $k => &$v )
。我发誓有一次它像阵列中的幻影物品......哈哈
答案 2 :(得分:0)
您需要更改json结构,然后进行必要的更改,我在下面提到
$json = '{
"11111111": {
"id": "val_somevalue5555",
"customer": {
"32312": {
"name": "john doe"
}
}
},
"2222222": {
"id": "val_somevalue25",
"customer": {
"32312234": {
"name": "jane doe"
}
}
}
}';
$jsonarr = json_decode($json, true);
$newarr = [];
foreach($jsonarr as $key=> $value)
{
$newarr[] = ['key' => $key, 'id' => $value['id']];
}
var_dump($newarr);
答案 3 :(得分:0)
添加另一个foreach来循环[0]
的元素,如果你有更多这个元素。
foreach($jsonarr as $value)
{
foreach($value as $key => $val){
$newarr[] = ['key' => $key, 'id' => $val['id']];
}
}
<强>结果强>
array(2) {
[0]=>
array(2) {
["key"]=>
int(11111111)
["id"]=>
string(17) "val_somevalue5555"
}
[1]=>
array(2) {
["key"]=>
int(2222222)
["id"]=>
string(15) "val_somevalue25"
}
}
答案 4 :(得分:0)
你在看这个o / p:
$json = '[{
"11111111": {
"id": "val_somevalue5555",
"customer": {
"32312": {
"name": "john doe"
}
}
},
"2222222": {
"id": "val_somevalue25",
"customer": {
"32312234": {
"name": "jane doe"
}
}
}
}]';
$jsonarr = json_decode($json, true);
$newarr = [];
foreach($jsonarr[0] as $key => $value)
{
//echo "<br />".$key = key($value);
$newarr[] = ['key' => $key, 'id' => $value['id']];
}
var_dump($newarr);
输出:
array(2) {
[0]=>
array(2) {
["key"]=>
int(11111111)
["id"]=>
string(17) "val_somevalue5555"
}
[1]=>
array(2) {
["key"]=>
int(2222222)
["id"]=>
string(15) "val_somevalue25"
}
}
或者你可以改变json结构,因为ankit说道并遵循他的代码......