2

我有一个字符串,我想知道如何在 4 个字符的间隔中保留 1 个字符。

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

我希望我的新字符串是:

yox

它来自bc7 y ad3 o df0 x

要省略的三个字符始终类似于 char-char-number。

编辑:谢谢大家的回答。我测试了你所有的答案,它们对我来说很好,除了 trisweb 的 preg_replace() 解决方案,我得到“未知修饰符'g'”。我接受 Bhavik Shah 的回答,因为我认为这是我理解的最简单的。

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
$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);

我们在这里所做的是将出现的“字母-字母-数字”替换为空白字符串,并删除它们。

如果字符串始终是您所说的形式,那么它应该可以正常工作。但是,如果您总是只想保留第 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

在 php 中,您可以访问像数组一样的字符串

例子:

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

所以你可以把每四个字符连接到你的最终字符串。这是我目前能想到的最简单的方法。

于 2013-02-11T14:35:44.913 回答
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 回答
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

很简单的for循环

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