我有一个表单中的textarea,允许用户输入由换行符或逗号分隔的数字列表。我需要输入的数字输入数组。不幸的是,我所拥有的代码并不是一直有效。如果用户输入逗号分隔数据和换行符,则逗号将保留在结果数组中。此外,如果他们在文本字段的末尾添加换行符,则它会在数组中输入空值。我的代码如下:
$data = preg_split( "[\r\n]", $_POST[ 'textarea' ] );
if (count($data) == 1) {
$string = $data[0];
$data = explode(',', $string);
}
我希望能帮助解决我遇到的问题。
答案 0 :(得分:11)
“由换行符或逗号分隔的数字列表”
那么,你不关心它是哪一个,或者是否有逗号和换行?那么为什么不简单地将所有三个字符作为分隔符使用并允许“一个或多个”呢?
<?php
$input = '1,2,3
4,5,,,,
,6,
7
,8,9';
$data = preg_split("/[\r\n,]+/", $input, -1, PREG_SPLIT_NO_EMPTY);
var_dump($data);
打印
array(9) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
}
答案 1 :(得分:3)
$input = '1,2,3
4,5,,,,
,6,
7
,8,9
';
$data = str_replace(array("\r", "\n"), ',', $input);
$data = array_filter(explode(',', $data));
var_dump(array_values($data));
打印
array(9) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
}
答案 2 :(得分:0)
可能的原因之一可能是您缺少分隔符而+
要找到一个或多个分隔符,而不是:
$data = preg_split( "[\r\n]", $_POST[ 'textarea' ] );
尝试:
$data = preg_split("/[\r\n]+/", $_POST[ 'textarea' ]);
答案 3 :(得分:0)
您应该从空白处“修剪”用户输入:
$data = preg_split("[\r\n"], trim($_POST["textarea"]));
这将删除前导和尾随空格。您还可以删除前导和尾随逗号 - 在使用csv时防止空数组索引 - 通过将逗号指定为第二个要修剪的参数:
trim($data, ",");
有关修剪的更多信息,请参阅http://php.net/trim
答案 4 :(得分:0)
$data = preg_split( "/[\r\n]+|,/", trim($_POST['textarea']) );
这将按换行符或逗号分隔,并消除任何尾随换行符。
答案 5 :(得分:0)
如果你想将多空格剥离到单个空格,请在前后修剪空格,并允许分号';'而不仅仅是逗号',',那么这段代码对我有用。我相信这可以在一个preg_split和/或preg_replace中完成!
$string = ' 1,2,3
4,5,;,,
;6,
7
, 8 ,9; 10 ; 11;';
$tmp = preg_split("/[\r\n,;]+/", $string, -1, PREG_SPLIT_NO_EMPTY);
foreach($tmp as $val)
{
$val = trim(preg_replace('!\s+!', ' ', $val));
if($val != "")
$data[] = $val;
}
var_dump($data);
/* Returns
array(11) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
[6]=>
string(1) "7"
[7]=>
string(1) "8"
[8]=>
string(1) "9"
[9]=>
string(2) "10"
[10]=>
string(2) "11"
}
*/