//定义递归函数以提取嵌套值
function printValues($arr) {
global $count;
global $values;
//检查输入是否为数组
if(!is_array($arr)){
die("错误:输入不是数组");
}
/*
遍历数组,如果value本身是数组,则递归调用
函数将找到的值添加到输出项目数组中,
并为找到的每个值将计数器加1
*/
foreach($arr as $key=>$value){
if(is_array($value)){
printValues($value);
} else{
$values[] = $value;
$count++;
}
}
// 返回在数组中找到的总计数和值
return array('total' => $count, 'values' => $values);
}
//将JSON编码的字符串分配给PHP变量
$json = '{
"book": {
"name": "Harry Potter and the Goblet of Fire",
"author": "J. K. Rowling",
"year": 2000,
"characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"],
"genre": "Fantasy Fiction",
"price": {
"paperback": "$10.40", "hardcover": "$20.32", "kindle": "4.11"
}
}
}';
//将JSON数据解码为PHP关联数组格式
$arr = json_decode($json, true);
//调用该函数并打印所有值
$result = printValues($arr);
echo "
" . $result["total"] . " value(s) found:
";echo implode("
", $result["values"]);
echo "
";
//打印一个值
echo $arr["book"]["author"] . "
"; //输出: J. K. Rowling
echo $arr["book"]["characters"][0] . "
"; //输出: Harry Potter
echo $arr["book"]["price"]["hardcover"]; //输出: $20.32
?>