如何从以制表符分隔的父/子关系的平面文件创建多维数组结构?



标题不是很好,但我想我可以更好地解释我想要达到的效果,像这样:

给定平面文件:

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, '  '));

相关内容

  • 没有找到相关文章

最新更新