在PHP中,修改逗号分隔列表中字符串的最短方法


Shortest way to modify strings in a comma separated list, in PHP

如果我想修改这样一个逗号分隔的列表:

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