2

文字列があり、4文字の間隔で1文字を維持する方法を知りたいです。

$string = "bc7yad3odf0x"; // and goes like this..

新しい文字列を次のようにします。

yox

これはbc7yad3 odf0xから出てます

省略される3文字は、常にchar-char-numberのようになります。

編集:答えてくれてありがとう。私はあなたのすべての答えをテストしましたが、「不明な修飾子'g'」を取得するtriswebのpreg_replace()ソリューションを除いて、それらは私にとっては正常に機能します。私の理解では最も簡単だと思うので、私はBhavikShahの答えを受け入れます。

4

10 に答える 10

4

それだけ

preg_replace("/\w{3}(\w)/","$1",$string);
于 2013-02-11T14:30:11.330 に答える
3
$nstr = "";
$str_array = array();

//split string in chunks of 4-char strings
$str_array = str_split($string, 4);

//loop through all elements of array and take the required character
foreach($str_array as $key => $value){
    $nstr .= $value[3];
}
echo $nstr;

str_splitの詳細。

于 2013-02-11T14:26:46.323 に答える
1

これを試して

$y = 3;
for($i=0; $i<strlen($string); $i++){
    if($y < strlen($string)){
        $out .= substr($string,$y,1);
        $y = $y+4;
    }else{
        break;
    }
}
echo $out;
于 2013-02-11T14:49:55.860 に答える
1

PHPでは、配列のような文字列にアクセスできます

例:

$text = "abcde";
echo $text[1]; // b

そのため、4 文字ごとに取得して最終的な文字列に連結できます。現時点で私が考える最も簡単な方法です。

于 2013-02-11T14:35:44.913 に答える
1
$str = "bc7yad3odf0x";
$final_str = "";
$len = strlen($str);

for($i = 3; $i < $len; $i = $i+4) {
    $final_str .= substr($str, $i, 1)." ";
}

echo $final_str;
于 2013-02-11T14:26:45.190 に答える
1
$newString = implode(
    '',
    array_map(
        function($value) {
            return substr($value,-1);
        },
        str_split($string,4)
    )
);
于 2013-02-11T14:27:28.797 に答える
1
$string = "bc7yad3odf0x";
$new_string = "";
$iterations = ceil(strlen($string)/4);

for ($i=1;$i <= $iterations; $i++)
{
    $new_string .= substr($string, $i*4-1, 1);
}

print $new_string;
于 2013-02-11T14:29:11.493 に答える
1

正規表現の仕事のようです!

$kept = preg_replace('/[a-z]{2}[0-9]/gi', "", $string);

ここで行っているのは、種類 "letter-letter-number" の発生を空白の文字列に置き換えて、それらを削除することです。

文字列が常にあなたが言った形式である場合、それはうまくいくはずです。ただし、常に 4 番目の文字を保持したい場合は、次のように使用できます。

$kept = preg_replace('/.{3}(.)/gi', "$1", $string);

または、後方参照を使用して最初の形式をより厳密にするという同様のアイデアを使用するには、次を使用します。

$kept = preg_replace('/[a-z]{2}[0-9](.)/gi', "$1", $string);

PHP での正規表現の使用について詳しくは、この素晴らしい記事を参照してください。

于 2013-02-11T14:29:54.063 に答える
1

簡単な for ループ

$ans = "";
for($i = 3, $l = strlen($s); $i < $l; $i += 4)
    $ans .= $s[$i];
于 2013-02-11T14:52:40.643 に答える
1

正規表現を使用することをお勧めします:

$var = "bc7yad3odf0x";

$var = preg_replace("/[a-z]{2}[0-9]([a-z])/i","$1",$var);

echo $var;

$var = "bc7yad3odf0x";

$var = preg_replace("/[a-z]{2}[0-9]/i","",$var);

echo $var;
于 2013-02-11T14:38:18.680 に答える