1

我有以下字符串:

$str = "ABACADAF";

我正在使用以下代码:

$first2 = substr($str, 0, 2);

我想得到以下输出:

output => `AB,AC,AD,AF`

(每两个字符用逗号分隔)

但是我得到的结果是不正确的。

我检查了 php 手册,但这没有帮助,是否有一些 foreach 循环来遍历所有字符串字符?

4

6 回答 6

4

未经测试,但应该是这样的:

<?php

$string = "ABACADAF";
$split = str_split($string, 2);
$implode = implode(",", $split);

echo $implode;

?>
于 2013-08-21T16:11:20.990 回答
3

您正在寻找str_split函数。你可以这样做:

$sResult = join(',', str_split($sData, 2));

或者,您可以通过正则表达式执行此操作:

$sResult = preg_replace('/(..)(?!$)/', '$1,', $sData);
于 2013-08-21T16:10:32.210 回答
1

你可以这样做,也可以递归地这样做。

<?php
for ($i=0; $i< strlen($str); $i=$i+3)
{
    $str = substr($str,i,2).",".substr($str,3);
}
echo $str;
?>

我个人更喜欢递归实现:

<?php

    function add_comma($str)
    {
        return substr($str, 0, 2,).','.add_comma(subtr($str,3));
    }
    echo add_comma($str);

?>
于 2013-08-21T16:14:37.643 回答
1

这是一个可用于从 foreach 输出的函数。我们找到两个大写字母匹配并将它们放入一个数组中,然后我们将其分解为array()一个字符串。

<?php
    function splitter($string){
        preg_match_all('/[A-Z]{2}/', $string, $matches);
        $newstring = implode(',',$matches[0]);
        return $newstring;
    }


    $strings = array("ABACADAF","ACABAFAC","AAABAFAD","ACACADAF");
    foreach($strings as $string){
        echo splitter($string)."\n";    
    }
?>

输出

AB,AC,AD,AF
AC,AB,AF,AC
AA,AB,AF,AD
AC,AC,AD,AF

如果你运行了很多(数百万行),你可以使用这个函数。它要快得多。

function splitter($string){
    $newstring = substr(chunk_split($string, 2, ','), 0, -1);
    return $newstring;
}
于 2013-08-21T16:32:20.610 回答
0

虽然这可以通过for循环来实现,但在 TomUnite 的回答中它更干净(并且可能更快),并且更加直截了当。

但是既然你问了......
使用 for 循环,你可以这样做:

$withCommas = substr($string, 0, 2);

for($i=0; $i < strlen($string); $i += 2){
    $withCommas+= "," . substr($string, $i, $i+2);
}
于 2013-08-21T16:15:30.867 回答
0

这是您的问题的解决方案和相同的输出:我亲自测试了它:

<?php
$str     =  "ABACADAF";
$first   =  substr($str, 0, 2);
$second  =  substr($str, 2, 2);
$third   =  substr($str, 4, 2);
$fourth  =  substr($str, 6, 2);

echo $output  =  $first.",".$second.",".$third.",".$fourth;     

?>
于 2013-08-21T16:20:55.780 回答