我有这个json文件,我想回来" host_name"所有项目的值。下面,我的PHP代码,我尝试了一些东西,使用true解码数组中的json或没有它并使用foreach()
,但我无法做到。
{
"href": "https://webservice:8080",
"items": [
{
"Hosts": {
"cluster_name": "cluster1",
"host_name": "server1"
},
"href": "https://server1:8080"
},
{
"Hosts": {
"cluster_name": "cluster1",
"host_name": "server2"
},
"href": "https://server2:8080"
},
{
"Hosts": {
"cluster_name": "cluster1",
"host_name": "server3"
},
"href": "https://server3:8080"
}
]
}
这是我的PHP代码。想尽可能简单。我的目标是使用json的最后一个值(' host_name')来显示所有这些值。
<?php
$content = file_get_contents("test.json");
$content = utf8_encode($content);
$result = json_decode($content, true);
var_dump($result);
echo "<br><br><br>";
#echo $result["items"]["Hosts"][0]["host_name"];
foreach($result as $r) {
echo $r['items']['Hosts']['cluster_name'].'<br>';
}
?>
感谢。
答案 0 :(得分:2)
你只是在错误的数组上循环,它应该是
foreach($result['items'] as $item) {
echo $item['Hosts']['host_name'];
}
答案 1 :(得分:2)
$result
需要$result['items']
foreach($result['items'] as $r) {
echo $r['Hosts']['cluster_name'];
echo PHP_EOL;
}
输出: - https://eval.in/837593
答案 2 :(得分:1)
如上所述,您正在遍历错误的数组。您也可以像这样遍历对象:
$obj = json_decode(utf8_encode(file_get_contents("test.json")));
foreach($obj->items as $item)
{
var_dump($item->Hosts->host_name);
}
答案 3 :(得分:1)
只是为了显示替代方法,您可以使用array_column()
和implode()
来省略将使用foreach循环方法显示的尾随<br>
。
代码:(Demo)
$items=json_decode($json,true)['items'];
echo implode("<br>",array_column(array_column($items,'Hosts'),'host_name'));
输出:
server1<br>server2<br>server3