如果我想修改这样一个逗号分隔的列表:
$foo = "2, 4, 33, 25, 66"
成为
$foo = "'1-2', '1-4', '1-33', '1-25', '1-66'"
在PHP中实现这一点的最快、最有效的方法是什么?
编辑:我已经尝试过了,但正在寻找更好的方法:
$foo = "2, 4, 33, 25, 66";
$bar = implode("', '1-",explode(",",$foo));
$foo = "'1-". $bar ."'";
$foo = "2, 4, 33, 25, 66";
echo preg_replace("/('d+)(,?)/", "'1-$1'$2", $foo );
根据@roullie的要求,这里有一个快速regex解决方案。在正则表达式中,'d+
匹配1个或多个数字。,?
匹配0或1逗号(最后一项没有公共项,所以我必须在0或1上匹配。
最短代码:
implode(", ", array_map(function($item) {
return "'1-{trim($item)}'";
}, explode(",", $foo));
基本上,您可以用逗号分割字符串,并将数字映射到1-$number'
格式,不要忘记修剪分解后的值,然后将它们连接回来。这也是最快的代码,因为解释的PHP
代码的数量是最小的。
如果您确定初始字符串中的所有项目都用逗号+空格分隔,那么您可以用该字符串进行分解,并去掉trim()
:
implode(", ", array_map(function($item) {
return "'1-$item'";
}, explode(", ", $foo));
try:
$foo = implode(", ", array_map(function($v) {return "1-".$v}, explode(", ", $foo)));
您可以尝试如下:
$foo = "2, 4, 33, 25, 66";
$new_foo = implode("', '1-",explode(",",$foo));
echo "'1-".$new_foo."'";
首先将其移动到数组中,并将1-附加到每个数字上。
values[] = array_explode(",",$foo);
unset($foo);
foreach($values as $value)
{
$value = '1-'.$value;
$foo[] = $value;
}