PHP Foreach树替代品

时间:2017-06-07 20:35:39

标签: php json foreach

这是一个foreach树,在解析JSON时在我的工作流程中很常见,但我不禁想到有更好的方法。我试着看一下这个,我发现有些人指的是array_walk,但我不知道这怎么会消除在foreach内部foreach内部做foreach的需要。有帮助吗?如果有更好的方法,我很乐意学习,因为这并不总是方便而且感觉很乱。

根据评论中的要求,预期的结果是为每个学位生成一个页面,但该页面的模板将使用foreach树中的所有名称变量(以及我未包含的其他一些名称变量)。我剥离了我的PHP以保持示例简单,虽然我知道我的用例会影响问题的解答方式,这就是我添加该信息的原因。

这是一些解析数组的PHP:

    if (guess == numberDrawn) {
         System.out.println("Congratulations, your guess is correct!");
         correct = true;
    } else if (guess > numberDrawn) {
                System.out.println("The number is lesser, guesses made: " + i);           
                i++;
    } else if (guess < numberDrawn) {
                System.out.println("The number is greater, guess made: " + i);           
                i++;
    }

这是JSON:

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

1 个答案:

答案 0 :(得分:2)

不确定这总体如何,但它会按顺序递归提取name项目:

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