例如,我想从这个字符串中的元素创建一个数组:
$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);
}
但我觉得有一种方法可以解决这个问题。什么好主意吗?
当前回答
使用array_map可以完成以下操作:
$new_arr = array_map('trim', explode(',', $str));
其他回答
修剪和爆炸
$str = '红色,绿色,蓝色,橙色';
$str = 修剪($str);
$strArray = 爆炸(',',$str);
print_r ($ strArray);
你也可以用一行正则表达式来实现
preg_split('@(?:\s*,\s*|^\s*|\s*$)@', $str, NULL, PREG_SPLIT_NO_EMPTY);
通过结合现有答案中的一些原则,我想出了
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来解决这个问题,就像回答中提到的那样,但是一旦你这样做了,技术上就不需要通过regex删除连续的逗号,从而缩短表达式
下面的代码还处理了输入字符串开始/结束处的空白:
$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);
为此可以使用preg_split()。
$bar = preg_split ('/[,\s]+/', $str);
print_r ($bar);
/* Result:
Array
(
[0] => red
[1] => green
[2] => blue
[3] => orange
)
*/