【发布时间】:2017-11-09 09:01:06
【问题描述】:
这是解析 JSON 时在我的工作流程中常见的 foreach 树,但我不禁想到有更好的方法。我试着查了一下,发现有些人指的是array_walk,但我不明白这将如何消除在foreach 中的foreach 中执行foreach 的需要。有什么帮助吗?如果有更好的方法,我很想学习,因为这并不总是很方便,而且感觉很混乱。
根据 cmets 的要求,预期结果是为每个学位生成一个页面,但该页面的模板将使用 foreach 树中的所有名称变量(以及我未包含的其他一些变量)。我剥离了我的 PHP 以保持示例简单,尽管我知道我的用例可能会影响问题的回答方式,所以这就是我添加该信息的原因。
这里有一些 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"
}
}
}
}
}
}
}
【问题讨论】:
-
显示初始输入和预期结果
-
嘿 RomanPerekhrest,我用更具体的例子更新了我的问题。在这种情况下,我使用层次结构为每个程序、学位和课程生成一个页面。虽然在我的示例中,我只是简单地回显了每个课程名称以保持简单。
-
你想只输出“课程”名称吗?
-
更容易帮助处理有效的 JSON。
-
抱歉 AbraCadaver,我更新了有效的 JSON。我为这个假设当场写了它,尽管如果有任何可能的答案,我会实施。在这种情况下,我将为每个学位生成一个页面,该页面使用该页面上的程序、学位、课程的名称。我有办法做到这一点,我只是想知道是否有比做 foreach 树更好的方法。