在PHP中将textarea转换为数组,将缩进文本转换为嵌套数组

在PHP中将textarea转换为数组,将缩进文本转换为嵌套数组,php,arrays,textarea,Php,Arrays,Textarea,我想从PHP中的FormTextArea帖子中获取文本输入,并迭代每一行文本,用文本创建一个PHP数组 问题是,我想把前面有4个空格的文本行缩进,并使这些行成为上述数组项下的子嵌套数组 我不知道现在该怎么做,所以如果有任何想法,我将不胜感激 // basic demo to show each line of textarea post $text = $_POST['textarea']; foreach(explode("\n", $text) as $line) { echo $l

我想从PHP中的FormTextArea帖子中获取文本输入,并迭代每一行文本,用文本创建一个PHP数组

问题是,我想把前面有4个空格的文本行缩进,并使这些行成为上述数组项下的子嵌套数组

我不知道现在该怎么做,所以如果有任何想法,我将不胜感激

// basic demo to show each line of textarea post
$text = $_POST['textarea'];
foreach(explode("\n", $text) as $line) {
    echo $line;
    echo '<br>';
}   

要用4个空格分隔:

$txt = preg_split('/    +/', $text);
只是第一次尝试:

$str = <<<EOD
bar
    baz
        meh
        lol
            tuuut
moo
EOD;

function parse($lines, $depth = 0, $cur = 0)
{
    $retVal = array();

    for ($i = $cur; $i < count($lines); $i++)
    {
        $line = $lines[$i];
        $lDepth = strlen($line) - strlen(ltrim($line, " "));

        if ($lDepth == $depth)
        {
            $retVal[] = array("line" => ltrim($line, " "));
        } elseif ($lDepth == $depth + 4) {
            $children = parse($lines, $depth + 4, $i);
            $retVal[count($retVal) - 1]["children"] = $children;
            $i += count($children);
        }
    }

    return $retVal;
}

$lines = explode("\n", $str);
echo "<pre>";
print_r(parse($lines));

我不确定,但您是否尝试过
\t
或爆炸后开始时的空格数?@SougataBose我检测到行空间没有问题我想将它们嵌套在父阵列下如果有任何空格或制表符,则设置子阵列我检测到行空间没有问题我想将它们嵌套在父阵列下数组你的父数组是什么,我似乎无法理解你的问题嘿。首先,我真的很想感谢你的这段话。因为我需要在JSON中包含重要的属性,所以这个数组将被转换为。出于某种原因,当我添加另一个根元素(depth=0)时,代码“认为”它是前一个元素的根级别。要点中包含的输入。非常感谢。
$str = <<<EOD
bar
    baz
        meh
        lol
            tuuut
moo
EOD;

function parse($lines, $depth = 0, $cur = 0)
{
    $retVal = array();

    for ($i = $cur; $i < count($lines); $i++)
    {
        $line = $lines[$i];
        $lDepth = strlen($line) - strlen(ltrim($line, " "));

        if ($lDepth == $depth)
        {
            $retVal[] = array("line" => ltrim($line, " "));
        } elseif ($lDepth == $depth + 4) {
            $children = parse($lines, $depth + 4, $i);
            $retVal[count($retVal) - 1]["children"] = $children;
            $i += count($children);
        }
    }

    return $retVal;
}

$lines = explode("\n", $str);
echo "<pre>";
print_r(parse($lines));
Array
(
    [0] => Array
        (
            [line] => bar
            [children] => Array
                (
                    [0] => Array
                        (
                            [line] => baz
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [line] => meh
                                        )

                                    [1] => Array
                                        (
                                            [line] => lol
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [line] => tuuut
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [line] => moo
        )

)