Answers:
您可以使用array_map执行以下操作:
$new_arr = array_map('trim', explode(',', $str));
改进的答案
preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red, green thing ,, ,, blue ,orange');
结果:
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
)
这个
red
为*red*
。更好的可能是/(\ s *,\ s *)+ /
这就是您如何在一行代码中替换和爆炸的方法
$str = 'red, green, blue ,orange';
$new_string = explode(',',preg_replace('/\s+/', '', $str));
将结果输出为
Array
(
[0] => red
[1] => green
[2] => blue
[3] => orange
)
通过将一些原理结合到现有答案中,我得出了
preg_split ('/\s*,+\s*/', 'red, green thing ,, ,, blue ,orange', NULL, PREG_SPLIT_NO_EMPTY);
其背后的原因是,我在此答案中发现了一个错误,即如果字符串末尾有逗号,它将在数组中返回一个空白元素。即
preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red, green thing ,, ,, blue ,orange,');
结果是
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
[4] => ''
)
您可以按照此答案中的说明使用PREG_SPLIT_NO_EMPTY来解决此问题,但是要删除它,但是从技术上讲,不需要通过正则表达式删除连续的逗号,因此缩短了表达式
试试这个:
$str = preg_replace("/\s*,\s*/", ",", 'red, green, blue ,orange');
preg_replace()
不会从字符串生成数组。这是对错误问题的正确答案。不赞成投票。
$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');
较小的修改
特别是对于OP的示例字符串,由于要匹配的每个子字符串都是一个单词,因此可以使用str_word_count()。
代码:(演示)
$str = ' red, green, blue ,orange ';
var_export(str_word_count($str,1)); // 1 means return all words in an indexed array
输出:
array (
0 => 'red',
1 => 'green',
2 => 'blue',
3 => 'orange',
)
通过将必要的字符添加到字符掩码/ 3rd参数中,还可以将其改编为超出字母的子字符串(以及一些连字符和撇号-如果您阅读精美的字体)。
代码:(演示)
$str = " , Number1 , 234, 0 ,4heaven's-sake , ";
var_export(str_word_count($str,1,'0..9'));
输出:
array (
0 => 'Number1',
1 => '234',
2 => '0',
3 => '4heaven\'s-sake',
)
同样,由于示例字符串,我在狭义上处理此问题,但这将提供相同的期望输出:
代码:(演示)
$str = ' red, green, blue ,orange ';
var_export(preg_match_all('/[^, ]+/',$str,$out)?$out[0]:'fail');
您可以为此使用preg_split()。
$bar = preg_split ('/[,\s]+/', $str);
print_r ($bar);
/* Result:
Array
(
[0] => red
[1] => green
[2] => blue
[3] => orange
)
*/
$str = str_replace(" ","", $str);
\t\n\r\0\x0B
也
修剪并爆炸
$ str ='红色,绿色,蓝色,橙色';
$ str = trim($ str);
$ strArray = explode(',',$ str);
print_r($ strArray);