例如,我想从这个字符串中的元素创建一个数组:

$str = 'red,     green,     blue ,orange';

我知道你可以通过爆炸和循环,并修剪:

$arr = explode(',', $str);
foreach ($arr as $value) {
    $new_arr[] = trim($value);
}

但我觉得有一种方法可以解决这个问题。什么好主意吗?


当前回答

你也可以用一行正则表达式来实现

preg_split('@(?:\s*,\s*|^\s*|\s*$)@', $str, NULL, PREG_SPLIT_NO_EMPTY);

其他回答

试试这个:

$str = preg_replace("/\s*,\s*/", ",", 'red,     green,     blue ,orange');
$str = str_replace(" ","", $str);

这就是如何在一行代码中替换和爆炸

$str = 'red,     green,     blue ,orange';

$new_string = explode(',',preg_replace('/\s+/', '', $str));

将结果输出为

Array
(
    [0] => red
    [1] => green
    [2] => blue
    [3] => orange
)

使用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
)

这样的:

只对逗号进行分隔 修剪每个项目的空白。 忽略空项 不会用“绿色物品”这样的内部空格分割项目