例如,我想从这个字符串中的元素创建一个数组:
$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));
改进的答案
preg_split ('/(s*,*s*)*,+(s*,*s*)*/', 'red, green thing ,,
,, blue ,orange');
结果:
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
)
这:
- 仅在逗号上拆分
- 修剪每个项目中的空格。
- 忽略空项
- 不会像"绿色的东西"那样拆分带有内部空间的项目
下面还处理输入字符串开头/结尾的空格:
$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);
这是您在一行代码中替换和分解的方式
$str = 'red, green, blue ,orange';
$new_string = explode(',',preg_replace('/s+/', '', $str));
将结果输出为
Array
(
[0] => red
[1] => green
[2] => blue
[3] => orange
)
通过结合现有答案中的一些原则,我想出了
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来解决此问题,但是一旦您这样做,从技术上讲,就不需要通过正则表达式删除连续的逗号,因此缩短了表达式
您也可以使用一行正则表达式执行此操作
preg_split('@(?:s*,s*|^s*|s*$)@', $str, NULL, PREG_SPLIT_NO_EMPTY);
试试这个:
$str = preg_replace("/s*,s*/", ",", 'red, green, blue ,orange');
专门针对 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',
)
这也可以通过在字符掩码/第 3 个参数中添加必要的字符来适应字母以外的子字符串(以及一些连字符和撇号 - 如果您阅读细则)。
代码:(演示)
$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
)
*/
$str = str_replace(" ","", $str);
修剪和分解
$str='红色,绿色,蓝色,橙色';
$str = 修剪($str);
$strArray = 爆炸(',',$str);
print_r($strArray);