php - 递归排列数组

标签 php arrays recursion

我正在尝试按级别排列数组。这是我的数组:

Array
  (
    [0] => Array(
      [0] => Array(
        [id] => 971249312[name] => Wolverine
      )

      [children] => Array(
        [0] => Array(
          [0] => Array(
            [id] => 735327624[name] => Ciclop
          )

          [children] => Array()
        )
      )
    )

    [1] => Array(
      [0] => Array(
        [id] => 1926833684[name] => Gambit
      )
      [children] => Array()
    )

    [2] => Array(
      [0] => Array(
        [id] => 51194629[name] => Quicksilver
      )
      [children] => Array()
    )
  )

看到数组的第一个位置有 3 个元素 - 这必须是级别 0。这些元素的第一个位置必须是级别 1。这些元素的子元素是下一个级别,依此类推。 我不知道如何安排。

预期输出:

Array
(
    ["level_1"] => Array
        (
            [0] => Array
                (
                    [id] => 971249312
                    [name] => Wolverine
                )

            [1] => Array
                (
                    [id] => 1926833684
                    [name] => Gambit
                )

            [2] => Array
                (
                    [id] => 51194629
                    [name] => Quicksilver
                )

        )

    ["level_2"] => Array
        (
            [0] => Array
                (
                    [id] => 735327624
                    [name] => Ciclop
                )

        )

)

最佳答案

另一个递归树遍历。

我“深度优先”扫描树,因此我需要跟踪当前的“级别”。

Demonstration at eval.in

树扫描例程:

/**
 * Recursive scan of the tree
 * 
 * @node   array    Current Node to be processed
 * @level  integer  Current depth of the tree
 * output  array    reference to where to store the details
 *   
 * @return void
 */   
function scanNode($node, $level, &$output)
{
    $outLevelIdx = 'level_'. $level; 

    foreach ($node as $idx => $info) {

        $parent = current($info); 

        $output[$outLevelIdx][] = array('id' => $parent['id'], 'name' => $parent['name']);

        if (!empty($info['children'])) { // go scan the children
            scanNode($info['children'], $level + 1, $output);
        }        
    }  
}  

运行扫描:

/*
 *  Output array in here - pass as a reference 
 */  
$output = array();

// scan the full tree
scanNode($source, 0, $output);

示例输出:

output
Array
(
    [level_0] => Array
        (
            [0] => Array
                (
                    [id] => 971249312
                    [name] => Wolverine
                )

            [1] => Array
                (
                    [id] => 1926833684
                    [name] => Gambit
                )

            [2] => Array
                (
                    [id] => 51194629
                    [name] => Quicksilver
                )
        )

    [level_1] => Array
        (
            [0] => Array
                (
                    [id] => 735327624
                    [name] => Ciclop
                )
        )
)

关于php - 递归排列数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42019459/

相关文章:

java - 我可以清理堆栈跟踪吗?

php - 使用路径在 PHP 数组中进行递归搜索

php - 如何确保处理 ajax 请求的 PHP 脚本不可访问且用户已通过身份验证?

javascript - .forEach 方法将更新应用于数组中的所有项目而不是单个项目

php - 使用简单的 HTML DOM 解析器解析 JSON?

php - 如何根据第一个表匹配获取第二个和第三个表的数据

java - Python 数组与 Java 中的相同吗?

c++ - 编译时递归函数来计算整数的下一次幂?

php - 需要连接php和mysql

java - org.json.JSONException : Value Array of type java. lang.String 无法转换为 JSONObject