PHP JSON多维数组仅输出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($

我在这件事上被难住了好几个小时。我需要获取数组的初始密钥和id。但是我只返回1个结果

下面是示例代码,这里还有一个链接-

简言之,预期产出应为

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