<?php
function parse_hierarchy($text, $indent = 0) {
static $format = '/^\t{%1$d}(?:$(*SKIP)(*FAIL)|(.+?)(?=^\t{%1$d}(?:[^\t]|$)|\z))/ms';
$callback = function ($block) use ($indent) {
return ($b = parse_hierarchy($b, $indent + 1)) ? [$a, $b] : [$a];
};
}
$text = '
階層0-0
階層0-0-0
階層0-0-1
階層0-1
階層0-2
階層0-2-0
階層0-2-1
階層0-2-1-0
階層0-2-1-1
階層0-2-1-1-0
階層0-3
';
PD9waHAKCmZ1bmN0aW9uIHBhcnNlX2hpZXJhcmNoeSgkdGV4dCwgJGluZGVudCA9IDApIHsKICAgIHN0YXRpYyAkZm9ybWF0ID0gJy9eXHR7JTEkZH0oPzokKCpTS0lQKSgqRkFJTCl8KC4rPykoPz1eXHR7JTEkZH0oPzpbXlx0XXwkKXxceikpL21zJzsKICAgICRjYWxsYmFjayA9IGZ1bmN0aW9uICgkYmxvY2spIHVzZSAoJGluZGVudCkgewogICAgICAgIGxpc3QoJGEsICRiKSA9IGV4cGxvZGUoIlxuIiwgJGJsb2NrLCAyKSArIFsxID0+ICcnXTsKICAgICAgICByZXR1cm4gKCRiID0gcGFyc2VfaGllcmFyY2h5KCRiLCAkaW5kZW50ICsgMSkpID8gWyRhLCAkYl0gOiBbJGFdOwogICAgfTsKICAgIHJldHVybiBwcmVnX21hdGNoX2FsbChzcHJpbnRmKCRmb3JtYXQsICRpbmRlbnQpLCAkdGV4dCwgJG0pID8gYXJyYXlfbWFwKCRjYWxsYmFjaywgJG1bMV0pIDogW107Cn0KCiR0ZXh0ID0gJwrpmo7lsaQwLTAKCemajuWxpDAtMC0wCgnpmo7lsaQwLTAtMQrpmo7lsaQwLTEK6ZqO5bGkMC0yCgnpmo7lsaQwLTItMAoJ6ZqO5bGkMC0yLTEKCQnpmo7lsaQwLTItMS0wCgkJ6ZqO5bGkMC0yLTEtMQoJCQnpmo7lsaQwLTItMS0xLTAK6ZqO5bGkMC0zCic7Cgp2YXJfZHVtcChwYXJzZV9oaWVyYXJjaHkoJHRleHQpKTs=