22

我试图弄清楚如何将 html textarea 转换为 php 数组,

我使用带有 POST 的表单将查询传递给 php 脚本,并且 php 文件使用以下行获取它们:

$ids = array($_POST['ids']);

不用说它把所有东西都放在一条线上

Array ( [0] => line1 line2 line3 line4 ) 

我需要最终结果来替换它:

$numbers = array(
"line1",
"line2",
"line3",
"line4"
);

划分和重新解析它的最佳方法是什么?

4

5 回答 5

52

使用爆炸\n是获得新线的正确方法。请记住,尽管在某些平台上,行尾实际上是由 发送的\r\n,所以仅仅爆炸\n可能会在每行的末尾留下额外的数据。

我的建议是删除\r之前的爆炸,所以你不必遍历整个数组来修剪结果。作为最后的改进,你不知道实际上有一个$_POST['ids'],所以总是先检查它。

<?
$input = isset($_POST['ids'])?$_POST['ids']:"";

//I dont check for empty() incase your app allows a 0 as ID.
if (strlen($input)==0) {
  echo 'no input';
  exit;
}

$ids = explode("\n", str_replace("\r", "", $input));
?>
于 2013-05-13T09:23:42.777 回答
13

我会像这样完成 Hugo 的爆炸:

$ids = explode(PHP_EOL, $input);

手动预定义常量

就我的两分钱...

于 2014-07-05T12:13:50.530 回答
3

用这个

$new_array = array_values(array_filter(explode(PHP_EOL, $input)));

explode-> 将 textarea 转换为 php 数组(行由新行分割)
array_filter-> 从数组中删除空行
array_values-> 重置数组的键

于 2015-09-12T13:59:52.747 回答
-1

尝试使用爆炸功能

$ids = $_POST['ids']; // not array($_POST['ids'])
$ids = explode(" ", $ids); 

第一个参数是delimiter空格、换行符\r\n、逗号、冒号等,根据来自文本区域的字符串(从问题中不清楚值是用空格还是换行分隔)。

于 2013-05-13T09:12:54.233 回答
-1

如果 textarea 每个条目只包含换行符,那么我会执行以下操作:

$ids = nl2br($_POST['ids');
$ids = explode('<br />',$ids); //or just '<br>' depending on what nl2br uses.
于 2013-05-13T09:14:30.603 回答