PHP JSON多维数组仅输出1个结果
我在这件事上被难住了好几个小时。我需要获取数组的初始密钥和id。但是我只返回1个结果 下面是示例代码,这里还有一个链接- 简言之,预期产出应为PHP JSON多维数组仅输出1个结果,php,laravel,Php,Laravel,我在这件事上被难住了好几个小时。我需要获取数组的初始密钥和id。但是我只返回1个结果 下面是示例代码,这里还有一个链接- 简言之,预期产出应为 key 11111111 id val_somevalue5555 key 2222222 id val_somevalue25 我只得到一个结果 key 11111111 id val_somevalue5555 如果您不确定它是否是json的格式或是什么,我们将不胜感激 更改循环以使用foreach循环本身的键:如下所示 foreach($
key 11111111 id val_somevalue5555
key 2222222 id val_somevalue25
我只得到一个结果
key 11111111 id val_somevalue5555
如果您不确定它是否是json的格式或是什么,我们将不胜感激 更改循环以使用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)
look out,那么它有时会执行一些可怕的巫术操作。我发誓有一次它就像阵列中的幻影物品。。。lol您需要更改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);
如果您将拥有更多,请添加另一个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"
}
}
您是否正在查看此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);
或者,您可以按照ankit patel所说的更改json结构,然后按照他的代码进行操作……您迭代的内容是错误的。 使用
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将其表示为关联数组):
瞧:谢谢你,也谢谢你的解释!非常感谢!
array(2) {
[0]=>
array(2) {
["key"]=>
int(11111111)
["id"]=>
string(17) "val_somevalue5555"
}
[1]=>
array(2) {
["key"]=>
int(2222222)
["id"]=>
string(15) "val_somevalue25"
}
}
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
)
)
)
)
)
$jsonarr = json_decode($json, true);
$newarr = [];
foreach($jsonarr[0] as $key => $value) {
$newarr[] = ['key' => $key, 'id' => $value['id']];
}`
var_dump($newarr);