次の文字列があります。
$str = "ABACADAF";
次のコードを使用しています。
$first2 = substr($str, 0, 2);
次の出力を取得したい:
output => `AB,AC,AD,AF`
(コンマで区切られた 2 文字ごと)
しかし、私が得ている結果は正しくありません。
PHP マニュアルを確認しましたが、それは役に立ちません。すべての文字列文字を反復処理する foreach ループはありますか?
テストされていませんが、次の行に沿ったものである必要があります。
<?php
$string = "ABACADAF";
$split = str_split($string, 2);
$implode = implode(",", $split);
echo $implode;
?>
str_split関数を探しています。次のようにできます。
$sResult = join(',', str_split($sData, 2));
または、正規表現を介して行うこともできます。
$sResult = preg_replace('/(..)(?!$)/', '$1,', $sData);
このように、または再帰的に行うこともできます。
<?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);
?>
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;
}
これはfor
ループで実行できますが、TomUniteの回答ではよりクリーンで(そしておそらくより高速です)、よりストレートフォワードです。
しかし、あなたが尋ね
たので... forループを使用すると、次のように実行できます。
$withCommas = substr($string, 0, 2);
for($i=0; $i < strlen($string); $i += 2){
$withCommas+= "," . substr($string, $i, $i+2);
}