2016-12-27 10 views
1

PHPのForm Textarea POSTからテキスト入力を受け取り、テキストの各行を繰り返し、テキストを含むPHP配列を作成したい。PHPで配列をテキストと入れ子にしたテキストを入れ子にした配列に変換する

catchは、それらの前に4つのスペースでインデントされたテキスト行を取り上げ、それらの行を上記の配列項目の下位のネストされた配列にしたいと考えています。

私は現時点でどのようにこれを行うのか分からないので、その上に任意のアイデアをいただければ幸いです。

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

UPDATE

アイデアこれまでに4つのスペースで区切るを開始し、この線に沿って何か多分....

$text = $_POST['textarea']; 
$in_nested_array = false; 
$array = array(); 
foreach(explode("\n", $text) as $line) { 

    if($line is 4 spaces){ 
     $in_nested_array = true; 
     $array[''][$line]; 
    }else{ 
     //if in nested array and new line is not nested, add to root array 
     if($in_nested_array){ 

     }else{ 
      $in_nested_array = false; 
      $array[] = $line; 
     } 

    } 
} 
+0

私はわかりませんが、あなたが爆発した後、初めに '\ T 'または数スペースのを試してみましたか? –

+0

@SougataBose私は行スペースを検出するのに問題はありません。親の配列の下にそれらを入れたいと思っています – JasonDavis

+0

次に空白またはタブがある場合はサブ配列を設定します –

答えて

1

ちょうど最初の試み:

$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 
     ) 

) 
0

$txt = preg_split('/ +/', $text); 
+0

私は必要としている行スペースを検出できません親の配列の下にそれらをネストする – JasonDavis

+0

あなたの親配列は何ですか、あなたの質問を理解することはできません – Rahul

関連する問題