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

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

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

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

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


当前回答

通过结合现有答案中的一些原则,我想出了

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删除连续的逗号,从而缩短表达式

其他回答

使用array_map可以完成以下操作:

$new_arr = array_map('trim', explode(',', $str));

为此可以使用preg_split()。

$bar = preg_split ('/[,\s]+/', $str);
print_r ($bar);

/* Result:
  Array
  (
      [0] => red
      [1] => green
      [2] => blue
      [3] => 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);

通过结合现有答案中的一些原则,我想出了

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删除连续的逗号,从而缩短表达式