Sea*_*nWM 143 php trim explode higher-order-functions
例如,我想从这个字符串中的元素创建一个数组:
$str = 'red, green, blue ,orange';
Run Code Online (Sandbox Code Playgroud)
我知道你可以爆炸并循环它们并修剪:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Run Code Online (Sandbox Code Playgroud)
但我觉得有一种单线方法可以解决这个问题.有任何想法吗?
Sea*_*nWM 403
您可以使用array_map执行以下操作:
$new_arr = array_map('trim', explode(',', $str));
Run Code Online (Sandbox Code Playgroud)
Amr*_*awy 49
改进了答案
preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red, green thing ,, ,, blue ,orange');
Run Code Online (Sandbox Code Playgroud)
结果:
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
)
Run Code Online (Sandbox Code Playgroud)
这个
小智 24
以下内容还处理输入字符串开头/结尾的空格:
$new_arr = preg_split('/\s*,\s*/', trim($str));
Run Code Online (Sandbox Code Playgroud)
这是一个最小的测试,在每个合理的位置都有白色空格:
$str = ' first , second , third , fourth, fifth ';
$new_arr = preg_split('/\s*,\s*/', trim($str));
var_export($str);
Run Code Online (Sandbox Code Playgroud)
这是你如何在一行代码中替换和爆炸
$str = 'red, green, blue ,orange';
$new_string = explode(',',preg_replace('/\s+/', '', $str));
Run Code Online (Sandbox Code Playgroud)
将输出结果为
Array
(
[0] => red
[1] => green
[2] => blue
[3] => orange
)
Run Code Online (Sandbox Code Playgroud)
小智 5
通过结合现有答案中的一些原则,我想出了
preg_split ('/\s*,+\s*/', 'red, green thing ,, ,, blue ,orange', NULL, PREG_SPLIT_NO_EMPTY);
Run Code Online (Sandbox Code Playgroud)
其背后的原因是我在此答案中发现了一个错误,如果字符串末尾有逗号,它将返回数组中的空白元素。IE
preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red, green thing ,, ,, blue ,orange,');
Run Code Online (Sandbox Code Playgroud)
结果是
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
[4] => ''
)
Run Code Online (Sandbox Code Playgroud)
您可以通过使用本答案中提到的PREG_SPLIT_NO_EMPTY将其删除来解决此问题,但是一旦您这样做,技术上就不需要通过正则表达式删除连续的逗号,因此缩短的表达式