1

次の文字列があります。

$str = "ABACADAF";

次のコードを使用しています。

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

次の出力を取得したい:

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

(コンマで区切られた 2 文字ごと)

しかし、私が得ている結果は正しくありません。

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 からの出力に使用できる関数を次に示します。2 つの大文字の一致を見つけて配列に入れ、それを内破し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 に答える