我怎么能爆炸和修剪空白?

问题描述 投票:130回答:9

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

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

我知道你可以爆炸并循环它们并修剪:

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

但我觉得有一种单线方法可以解决这个问题。有任何想法吗?

php explode trim higher-order-functions
9个回答
375
投票

您可以使用array_map执行以下操作:

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

46
投票

一个改进的答案

preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red,     green thing ,,  ,,   blue ,orange');

结果:

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

这个

  • 仅限逗号分割
  • 修剪每个项目的空白区域。
  • 忽略空项目
  • 不拆分带有“绿色物品”等内部空间的物品

23
投票

以下内容还处理输入字符串开头/结尾的空格:

$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);

2
投票

您也可以使用单行正则表达式执行此操作

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

1
投票

试试这个:

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

0
投票

你可以使用preg_split()

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

/* Result:
  Array
  (
      [0] => red
      [1] => green
      [2] => blue
      [3] => orange
  )
 */

0
投票

特定于OP的示例字符串,因为要匹配的每个子字符串是单个字,您可以使用str_word_count()

代码:(Demo

$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',
)

通过在字符掩码/第3个参数中添加必要的字符,这也可以适用于字母以外的子字符串(以及一些连字符和撇号 - 如果您阅读了精细打印)。

代码:(Demo

$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',
)

同样,由于样本字符串,我正在非常狭隘地处理这个问题,但是这将提供相同的期望输出:

代码:(Demo

$str = ' red,     green,     blue ,orange ';
var_export(preg_match_all('/[^, ]+/',$str,$out)?$out[0]:'fail');

-4
投票
$str = str_replace(" ","", $str);

-9
投票

修剪和爆炸

$ str ='红色,绿色,蓝色,橙色';

$ str = trim($ str);

$ strArray = explode(',',$ str);

的print_r($ strArray);

© www.soinside.com 2019 - 2024. All rights reserved.