PHP Foreach树替代方案
这是一个foreach树,在解析JSON时在我的工作流中很常见,但我忍不住认为有更好的方法。我试着查找这个,我发现一些人提到array_walk,但我不认为这会消除在foreach内部foreach内部foreach的需要。有什么帮助吗?如果有更好的方法,我很想学习,因为这并不总是很方便,而且感觉很混乱 按照注释中的要求,预期结果是为每个学位生成一个页面,但该页面的模板将使用foreach树中的所有名称变量(以及我没有包含的其他一些变量)。我剥离了PHP以保持示例的简单性,尽管我知道我的用例可能会影响问题的答案,所以这就是我添加该信息的原因 下面是一些PHP来解析数组:PHP Foreach树替代方案,php,json,foreach,Php,Json,Foreach,这是一个foreach树,在解析JSON时在我的工作流中很常见,但我忍不住认为有更好的方法。我试着查找这个,我发现一些人提到array_walk,但我不认为这会消除在foreach内部foreach内部foreach的需要。有什么帮助吗?如果有更好的方法,我很想学习,因为这并不总是很方便,而且感觉很混乱 按照注释中的要求,预期结果是为每个学位生成一个页面,但该页面的模板将使用foreach树中的所有名称变量(以及我没有包含的其他一些变量)。我剥离了PHP以保持示例的简单性,尽管我知道我的用例可能
foreach ($programs as $program) {
$program_name = $program['name'];
$degrees = program['degrees'];
foreach ($degrees as $degree) {
$degree_name = $degree['name'];
$courses = $degree['courses'];
foreach ($courses as $course) {
$course_name = $course['name'];
echo $course_name;
}
}
}
以下是JSON:
{
"programs":{
"undergraduate":{
"name":"undergraduate",
"degrees":{
"elementary education":{
"name":"elementary education",
"courses":{
"math":{
"name":"math"
}
}
}
}
}
}
}
不确定这是否符合总体要求,但它会按顺序递归提取
名称
项:
$result = array();
array_walk_recursive($array, function($v, $k) use(&$result) {
if($k == 'name') { $result[] = $v; }
});
print_r($result);
收益率:
Array
(
[0] => undergraduate
[1] => elementary education
[2] => math
)
在显示初始输入和预期结果之前,我用一个更具体的例子更新了我的问题。在这种情况下,我使用层次结构为每个课程、学位和课程生成一个页面。虽然在我的示例中,我只是简单地回显每个课程名称以保持简单。是否只输出“课程”名称?更容易使用有效的JSON。抱歉,Abracadver,我使用有效的JSON更新了。我当场写了这个假设,虽然我会实现任何可能的答案,如果有一个。在这种情况下,我会为每个学位生成一个页面,使用该页面上所有课程、学位、课程的名称。我有办法做到这一点,我只是想知道是否有一个更好的方法比做foreach树。