我正在尝试根据文本区域中的输入创建一个数组。
我有一个名为textarea的文件.textarea可能包含如下值(精确地看起来):
CREATE this.
DO that.
STOP it.
基本上,我想使用 PHP 进行操作:
例如,根据textarea给出的值创建一个数组,由上述textarea的th个值组成的数组应为:
Array
(
[0] => create this
[1] => do this
[2] => Stop it
)
我尝试了以下代码:
<?php
$wholecode=$_POST['code'];
$code=explode('.',trim(strtolower($wholecode)));//convert code to array
$words=explode(' ', $code);
print_r($code);
我明白了
Array
(
[0] => create this
[1] =>
do this
[2] =>
stop it
[3] =>
)
很明显,这不是我想要的。请帮助
答案 0 :(得分:4)
创建数组后,您只需要整理一下数组内容。您会有诸如换行之类的内容,并且内容周围可能还有其他空白。
这使用array_map()
到trim()
数组中的每个条目。然后使用array_filter()
删除所有空元素(无需回调即可调用它)。
$wholecode=$_POST['code'];
$code=explode('.',trim(strtolower($wholecode)));//convert code to array
$code=array_map("trim", $code );
$code = array_filter($code);
print_r($code);
答案 1 :(得分:2)
这是一种直接方法,使用简单的正则表达式模式在零个或多个空格字符之后的点上爆炸。分裂后不扫地。
代码(Demo)
$_POST['code'] = 'CREATE this.
DO that.
STOP it.';
var_export(preg_split('~\.\s*~', strtolower($_POST['code']), -1, PREG_SPLIT_NO_EMPTY));
输出:
array (
0 => 'create this',
1 => 'do that',
2 => 'stop it',
)
作为变量...
$array = preg_split('~\.\s*~', strtolower($_POST['code']), -1, PREG_SPLIT_NO_EMPTY)
说明已从我的评论转移:
模式演示:https://regex101.com/r/jygaQ1/1
样本数据中有3个点。前两个具有紧随其后的空白字符。最后一个点没有尾随空格字符。
\s*
的意思是“匹配零个或多个空格字符。
-1
意味着无限爆炸。
PREG_SPLIT_NO_EMPTY
表示在最终爆炸(最后一个点)上将生成一个空元素,但是preg_split()
将在输出数组中忽略它。