使用php和new line作为分隔符从textarea值定义Array元素

时间:2014-04-13 19:43:30

标签: php arrays

我有很多textareas,应填充由新行分隔的单词或短语(按回车键)。

所以,在我的html页面上,我得到了类似的东西:

<textarea name="txt[1]" rows="6" cols="30"></textarea>
<textarea name="txt[2]" rows="6" cols="30"></textarea>
// and so on...

因此,我得到了一个php脚本,它应该捕获textareas的值并将其放入数组中。来自第一个textarea的文本应该在一个数组中等等......

这种结构有可能吗?一个阵列?更多阵列?

例如:我有一个类似的文字:

Textarea 1:
This is the new line 1
This is the new line 2
This is the new line 3

Textarea 2:
This is the new line 7
This is the new line 8

因此,数组应该是:

myarr[1] = ["This is the new line 1","This is the new line 2","This is the new line 3"];
myarr[2] = ["This is the new line 7","This is the new line 8"];
  

所以,如果我有myarr [2] [1] =它将是:这是新的第8行

是否可以在某个循环或任何内容中创建?或者可能以某种方式把它放在一个数组中?

3 个答案:

答案 0 :(得分:1)

您可以使用explode功能并检测换行符(&#34; \ n&#34;)将每个textarea的内容分解为数组

以下是一个示例脚本:

<form method="POST"> 

  <textarea name="txt[1]" rows="6" cols="30"></textarea> <br/>
  <textarea name="txt[2]" rows="6" cols="30"></textarea> <br/>
  <input type="submit" />

</form>

<?php
if( $_SERVER['REQUEST_METHOD'] == 'POST' ){

$txt = $_POST['txt'];
$txt[1] = explode( "\n" , $txt[1] );
$txt[2] = explode( "\n", $txt[2] ); 
print_r( $txt );
}
?>

结果数组将是这样的:

Array
(
[1] => Array
    (
        [0] => aaa bbb ccc
        [1] => ddd eee fff
    )

[2] => Array
    (
        [0] => www qqq ttt
        [1] => bbb mmm kkk
    )

)

答案 1 :(得分:0)

不是命名文本区域txt[1] txt[2] etc..,而是将它们命名为txt1 txt2 etc...

<?php
if(isset($_POST['submit'])){ //On submit
  $i = 1; //index of every text area. EX: txt1, txt2
  $result = array();
  while(isset($_POST["txt$i"])){
     $result[$i-1] = array(); //initialize the array starting from $result[0], $result[1] ...
     $result[$i-1] = explode("\n",$_POST["txt$i"]);//put every line as a separate element
     $i++; //increment i to go the next text area
  }

  //print the result array created
  print_r($result);
}

答案 2 :(得分:0)

PHP将所有txt[*]个元素视为array类型的一个请求参数。

所以你的脚本可能如下所示:

if (isset($_REQUEST['txt']) && is_array($arr = $_REQUEST['txt']) {
    $myarr = array_map(
        function ($v) {
            return explode("\n", str_replace("\r\n", "\n", $v));
        },
        array_values($arr)
    );
}