QA@IT
«回答へ戻る

4
 
 説明不足の点、すみませんでした。
 ここまでシンプルなコードになるとは思いませんでした。
-なんとか理解したつもりですが、PHPで再現する際に理解度がわかると思います。
-(できたコードはこちらで紹介できればと思います。)
+PHPでは以下のように再現しました。
+
+```ここに言語を入力
+<?php
+	$items = array(
+		array('text' => "1", "level" => "1"), 
+		array('text' => "2", "level" => "2"), 
+		array('text' => "3", "level" => "2"), 
+		array('text' => "4", "level" => "3"), 
+		array('text' => "5", "level" => "4"), 
+		array('text' => "6", "level" => "5"), 
+		array('text' => "7", "level" => "4"), 
+		array('text' => "8", "level" => "5"), 
+		array('text' => "9", "level" => "2"), 
+		array('text' => "10", "level" => "3")
+		);
+
+$index = 0;
+$result = array();
+$result = rebuildTree($result, $items, 1);
+echo json_encode($result);
+
+function rebuildTree($result, $items, $level)
+{
+	global $index;
+	
+	while($index < count($items))
+	{
+		if($level != $items[$index]['level'] && $index > 0)
+		{
+			if($level > $items[$index]['level']){
+			return $result;
+		}
+		
+		if($items[$index]['level'] == $level + 1)
+		{
+			$children = Array();
+			$children = rebuildTree($children, $items, $items[$index]['level']);
+			
+			if(count($children) > 0)
+			{
+				$result[count($result) - 1] += array('children' => $children);
+			}
+		}
+		}else{
+			array_push($result, array('text'=> $items[$index]['text'], 'level'=> $items[$index]['level']));
+			$level = $items[$index]['level'];
+			$index++;
+		}
+	}
+	return $result;
+}
+?>
+```

flied_onionさん、ありがとうございます。

説明不足の点、すみませんでした。
ここまでシンプルなコードになるとは思いませんでした。
PHPでは以下のように再現しました。

<?php
    $items = array(
        array('text' => "1", "level" => "1"), 
        array('text' => "2", "level" => "2"), 
        array('text' => "3", "level" => "2"), 
        array('text' => "4", "level" => "3"), 
        array('text' => "5", "level" => "4"), 
        array('text' => "6", "level" => "5"), 
        array('text' => "7", "level" => "4"), 
        array('text' => "8", "level" => "5"), 
        array('text' => "9", "level" => "2"), 
        array('text' => "10", "level" => "3")
        );

$index = 0;
$result = array();
$result = rebuildTree($result, $items, 1);
echo json_encode($result);

function rebuildTree($result, $items, $level)
{
    global $index;

    while($index < count($items))
    {
        if($level != $items[$index]['level'] && $index > 0)
        {
            if($level > $items[$index]['level']){
            return $result;
        }

        if($items[$index]['level'] == $level + 1)
        {
            $children = Array();
            $children = rebuildTree($children, $items, $items[$index]['level']);

            if(count($children) > 0)
            {
                $result[count($result) - 1] += array('children' => $children);
            }
        }
        }else{
            array_push($result, array('text'=> $items[$index]['text'], 'level'=> $items[$index]['level']));
            $level = $items[$index]['level'];
            $index++;
        }
    }
    return $result;
}
?>
flied_onionさん、ありがとうございます。

説明不足の点、すみませんでした。
ここまでシンプルなコードになるとは思いませんでした。
PHPでは以下のように再現しました。

```ここに言語を入力
<?php
	$items = array(
		array('text' => "1", "level" => "1"), 
		array('text' => "2", "level" => "2"), 
		array('text' => "3", "level" => "2"), 
		array('text' => "4", "level" => "3"), 
		array('text' => "5", "level" => "4"), 
		array('text' => "6", "level" => "5"), 
		array('text' => "7", "level" => "4"), 
		array('text' => "8", "level" => "5"), 
		array('text' => "9", "level" => "2"), 
		array('text' => "10", "level" => "3")
		);

$index = 0;
$result = array();
$result = rebuildTree($result, $items, 1);
echo json_encode($result);

function rebuildTree($result, $items, $level)
{
	global $index;
	
	while($index < count($items))
	{
		if($level != $items[$index]['level'] && $index > 0)
		{
			if($level > $items[$index]['level']){
			return $result;
		}
		
		if($items[$index]['level'] == $level + 1)
		{
			$children = Array();
			$children = rebuildTree($children, $items, $items[$index]['level']);
			
			if(count($children) > 0)
			{
				$result[count($result) - 1] += array('children' => $children);
			}
		}
		}else{
			array_push($result, array('text'=> $items[$index]['text'], 'level'=> $items[$index]['level']));
			$level = $items[$index]['level'];
			$index++;
		}
	}
	return $result;
}
?>
```

回答を投稿

flied_onionさん、ありがとうございます。

説明不足の点、すみませんでした。
ここまでシンプルなコードになるとは思いませんでした。
なんとか理解したつもりですが、PHPで再現する際に理解度がわかると思います。
(できたコードはこちらで紹介できればと思います。)

flied_onionさん、ありがとうございます。

説明不足の点、すみませんでした。
ここまでシンプルなコードになるとは思いませんでした。
なんとか理解したつもりですが、PHPで再現する際に理解度がわかると思います。
(できたコードはこちらで紹介できればと思います。)