使用PHP替换字符串中每隔一个逗号的逗号。

6
我有一个字符串,显示如下:

我有一个字符串,显示如下:

1235, 3, 1343, 5, 1234, 1

我需要将每个第二个逗号替换为分号。
即:
1235, 3; 1343, 5; 1234, 1

字符串长度将始终不同,但将遵循与上述相同的模式,即数字逗号空格数字逗号空格等。
我该如何使用PHP实现这一点?这可能吗?
谢谢。

3
当然可以,甚至非常简单。由于这是一个面向“专业程序员或爱好者”的网站,你应该能够在几分钟内找到许多可能的方法之一。 - deceze
4
你可以尝试这样做:$replaced = preg_replace('/(.*),(.*),/', '$1,$2;', $strToReplace); 我同意@deceze的观点。你应该自己尝试解决问题。 - Leri
我同意有很多方法可以实现这个!你应该尝试解决它,然后再回来问我们是否有更有效的方法。 - MadDokMike
请检查我的 preg_replace 解决方案,它是最短的。同时了解一下这个函数,因为当涉及到正则表达式时它真的很强大。 - Robert
1
糟糕,我的错。模式应该是/(.*?),(.*?),/而不是/(.*),(.*),/ - Leri
6个回答

10

Preg_replace() 的解决方案

$str = '1235, 3, 1343, 5, 1234, 1';
$str = preg_replace('/(.+?),(.+?),/', '$1,$2;', $str);
echo $str;

输出:

1235, 3; 1343, 5; 1234, 1

2
这绝对是最好的解决方案。 - Jordan Hudson
2
这是问题的最短解决方案 ;) - Avatar

7
尝试这个: ```尝试这个:```
$str     = '1235, 3, 1343, 5, 1234, 1';
$res_str = array_chunk(explode(",",$str),2);
foreach( $res_str as &$val){
   $val  = implode(",",$val);
}
echo implode(";",$res_str);

4

试试这个:

<?php
$string =  '1235, 3, 1343, 5, 1234, 1';

var_dump(nth_replace($string, ',', ';', 2));

// replace all occurences of a single character with another character
function nth_replace($string, $find, $replace, $n) {
        $count = 0;
        for($i=0; $i<strlen($string); $i++) {
                if($string[$i] == $find) {
                        $count++;
                }
                if($count == $n) {
                        $string[$i] = $replace;
                        $count = 0;
                }
        }
        return $string;
}
?>

结果:

 1235, 3; 1343, 5; 1234, 1 

1
请注意,$find和$replace只能是一个字符长。 - Avatar

2

试试这个:

$s = "1235, 3, 1343, 5, 1234, 1";
$pcs = explode(',', $s);

$flag = false;
$res = '';
foreach ($pcs as $item) {
    if (!empty($res)) {
        $res .= $flag ? ',' : ';';
    }
    $flag = !$flag;
    $res .= $item;
}
die($res);

它的输出结果为:

1235, 3; 1343, 5; 1234, 1

1

try this:

$s = '1235, 3, 1343, 5, 1234, 1';
$is_second = false;
for ($i = 0; $i < strlen($s); $i++) {
    if ($is_second && $s[$i] == ',') {
        $s[$i] = ';';
    } elseif ($s[$i] == ',') {
        $is_second = true;
    }
}
echo $s;

1

试试这个:

<?php
    $str = "1235, 3, 1343, 5, 1234, 1";
    $data = explode(',',$str);
    $counter = 0;
    $new_str = "";
    foreach($data as $key=>$val) {
        if ($counter%2 == 0) {
            $symbol=',';
        }
        else {
            $symbol=';';
        }
        $new_str .= $val.$symbol; 
        $counter++;
    }
    echo $new_str;
    //output::1235, 3; 1343, 5; 1234, 1;
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接