例如,我想从这个字符串中的元素创建一个数组:
$str = 'red, green, blue ,orange';
我知道你可以通过爆炸和循环,并修剪:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
但我觉得有一种方法可以解决这个问题。什么好主意吗?
例如,我想从这个字符串中的元素创建一个数组:
$str = 'red, green, blue ,orange';
我知道你可以通过爆炸和循环,并修剪:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
但我觉得有一种方法可以解决这个问题。什么好主意吗?
当前回答
试试这个:
$str = preg_replace("/\s*,\s*/", ",", 'red, green, blue ,orange');
其他回答
改进后的答案
preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red, green thing ,,
,, blue ,orange');
结果:
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
)
这样的:
只对逗号进行分隔 修剪每个项目的空白。 忽略空项 不会用“绿色物品”这样的内部空格分割项目
修剪和爆炸
$str = '红色,绿色,蓝色,橙色';
$str = 修剪($str);
$strArray = 爆炸(',',$str);
print_r ($ strArray);
下面的代码还处理了输入字符串开始/结束处的空白:
$new_arr = preg_split('/\s*,\s*/', trim($str));
这是一个最小的测试,在每个合理的位置都有空白:
$str = ' first , second , third , fourth, fifth ';
$new_arr = preg_split('/\s*,\s*/', trim($str));
var_export($str);
特别是对于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',
)
通过向字符掩码/第三个参数添加必要的字符,这也可以适用于字母以外的子字符串(以及一些连字符和撇号——如果您阅读了小字印刷)。
代码:(演示)
$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');
最后,如果你想用可选的前导或尾随空格分割逗号,下面是调用:(演示)
var_export(
preg_split ('/ *,+ */', $str, 0, PREG_SPLIT_NO_EMPTY)
);
为此可以使用preg_split()。
$bar = preg_split ('/[,\s]+/', $str);
print_r ($bar);
/* Result:
Array
(
[0] => red
[1] => green
[2] => blue
[3] => orange
)
*/