标题不是很好,但我想我可以更好地解释我想要达到的效果,像这样:
给定平面文件:
MAIN 0
Sub Heading 0
Sub Heading 1
MAIN 1
Sub Heading 0
Sub Sub Heading 0
Sub Sub Heading 1
Sub Heading 1
Sub Heading 2
Sub Sub Heading 0
Sub Sub Sub Heading 0
MAIN 2
Sub Heading 0
如何创建一个嵌套的"数组的数组"结构?子元素是通过在父元素的前面加上一个制表符来定义的。
我正试图在php中做到这一点,目前,并没有太多的工作要展示。我被困在试图找出逻辑。
我相信最好的解决方案可能是某种递归,也许tab_count变量和tab_count_ceiling变量?
我开始在php中做这个,但老实说,我对这个没有语言偏好。哪个代码可以解决这样的问题?
我写这段代码只是为了好玩。
ini_set('error_reporting', -1);
ini_set('display_errors', 1);
/**
* Recognising level of current header and header itself by counting prefixes
* before header
* @param string $string
* @param string $prefix
* @param &int $level
* @param &string $header
*/
function myGetLevelAndHeader($string, $prefix, &$level, &$header)
{
preg_match('/^((?:' . preg_quote($prefix) . ')*)(.*)$/', $string, $match);
$header = $match[2];
$level = strlen($match[1]) / strlen($prefix);
}
/**
* Adding to headers array to the desired dimension without recursion
* @param &array $headers ere
* @param integer $level
* @param string $header
*/
function myAddToHeaders(array &$headers, $level, $header)
{
$array = &$headers;
while ($level--)
{
//adding new dimension
is_null($array) ? $array = array() : end($array);
$last_key = key($array);
if (!is_null($last_key) && is_array($array[$last_key]))
$array = &$array[$last_key]; // going deeper
else
$array = &$array[]; // create new element and going deeper
};
$array[] = $header;
}
/**
* Simple parsing function
* @param array $lines
* @param string $prefix
* @return array
*/
function myParse(array $lines, $prefix = ' ')
{
$headers = array();
foreach ($lines as $line)
{
myGetLevelAndHeader($line, $prefix, $level, $header);
myAddToHeaders($headers, $level, $header);
}
return $headers;
}
$lines = file('file.txt');
print_r(myParse($lines, ' '));