【问题标题】:TextArea to Array with PHP使用 PHP 将 TextArea 转换为数组
【发布时间】:2013-05-13 09:11:20
【问题描述】:

我正在研究如何将 html textarea 转换为 php 数组,

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

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

不用说,它把所有东西都放在一行中

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

我需要最终结果来替换这个:

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

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

【问题讨论】:

  • 我建议使用preg_split()#\r\n?|\n#

标签: php html


【解决方案1】:

\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));
?>

【讨论】:

    【解决方案2】:

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

    $ids = explode(PHP_EOL, $input);
    

    手动Predefined Constants

    就我的两分钱...

    【讨论】:

    • PHP_EOL 返回服务器的正确结尾。如果 MAC 用户将文本发送到 Windows 服务器,则行尾将不匹配。
    【解决方案3】:

    使用这个

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

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

    【讨论】:

    • 正如Hugo Delsing 所说:PHP_EOL 返回服务器的正确结尾。如果 MAC 用户将文本发送到 Windows 服务器,则行尾将不匹配。
    • 使用 Codeigniter,我必须先替换 %0D%0A str_replace("%0D%0A", "\n", $input)
    【解决方案4】:

    如果 textarea 每个条目都有换行符,那么我会这样做:

    $ids = nl2br($_POST['ids');
    $ids = explode('<br />',$ids); //or just '<br>' depending on what nl2br uses.
    

    【讨论】:

    • 虽然nl2br 会正确识别所有新行,但它也会将它们留在其中。正如手动声明的那样,它会在新行字符之前插入&lt;br&gt; 标签,因此您最终会在每个数组元素上得到额外的数据,这对 id 没有用
    • 唯一的问题是每行有多余的空格(如果存在) - trim 会对其进行排序。
    【解决方案5】:

    试试explode function:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多