PHP: замените 3 символа на каждый 4-й символ в строке


У меня есть строка, и я хочу знать, как я могу сохранить 1 символ в интервале из 4 символов.

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

Я хочу, чтобы моя новая строка была:

yox

Который выходит из bc7 y ad3 o df0 x

Три символа, которые должны быть пропущены, всегда похожи на число символов.

РЕДАКТИРОВАТЬ: Спасибо всем вам за ответ. Я проверил все ваши ответы, и они отлично работают для меня, за исключением решения trisweb preg_replace(), где я получаю "Неизвестный модификатор 'g'". Я примите ответ Бхавик Шаха, так как я думаю, что он самый простой для моего понимания.

Author: mortaZa, 2013-02-11

10 answers

$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_сплит.

 3
Author: Bhavik Shah, 2013-02-11 14:26:46

Только это

preg_replace("/\w{3}(\w)/","$1",$string);
 4
Author: BattleBit, 2013-02-11 14:30:11
$str = "bc7yad3odf0x";
$final_str = "";
$len = strlen($str);

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

echo $final_str;
 1
Author: marvin, 2013-02-11 14:26:45
$newString = implode(
    '',
    array_map(
        function($value) {
            return substr($value,-1);
        },
        str_split($string,4)
    )
);
 1
Author: Mark Baker, 2013-02-11 14:27:28
$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;
 1
Author: kba, 2013-02-11 14:29:11

Похоже на работу для регулярного выражения!

$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, смотрите эту замечательную статью.

 1
Author: trisweb, 2013-02-11 14:29:54

В php вы можете получить доступ к строкам, подобным массивам

Пример:

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

Таким образом, вы могли бы взять каждый четвертый символ и объединить его с вашей последней строкой. Это самый простой способ, который я могу придумать на данный момент.

 1
Author: Francesco, 2013-02-11 14:35:44

Лучше использовать регулярное выражение:

$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;
 1
Author: Peter Adrian, 2013-02-11 14:38:18

Попробуйте это

$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;
 1
Author: Kathir, 2013-02-11 14:49:55

Это легко для цикла

$ans = "";
for($i = 3, $l = strlen($s); $i < $l; $i += 4)
    $ans .= $s[$i];
 1
Author: RiaD, 2013-02-11 14:52:40