Задать вопрос
Summersby
@Summersby
Fullstack

Как сделать только четные буквы заглавными?

Есть код, который делает заглавными случайные буквы строки, а как его изменить, чтобы заглавными становились только четные буквы?
$word = "Lorem ipsum dolor sit amet consectetur adipisicing elit.";
$wordarr = str_split($word);
$word = null;

foreach($wordarr as $ltr) {
    if (rand(0,1) == 1) {
        $word .= $ltr;
    } else {
        $word .=strtoupper($ltr);
    }
}

echo $word;
  • Вопрос задан
  • 464 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
preg_replace_callback() вызовет функцию для каждого совпадения паттерна.

Можно регуляркой /..?/ получить все пары букв (и огрызок в хвосте, если нечетное), а в функции первую из двух делать strtolower(), а вторую strtoupper():
echo preg_replace_callback(
    '/..?/',
    function ($match) {
        return strtolower($match[0][0]) . strtoupper($match[0][1]);
    },
    "Lorem ipsum dolor sit amet consectetur adipisicing elit."
);
// lOrEm iPsUm dOlOr sIt aMeT CoNsEcTeTuR AdIpIsIcInG ElIt.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@lolzqq
HTML,CSS,JS,PHP
В этой части кода
foreach($wordarr as $ltr) {
    if (rand(0,1) == 1) {
        $word .= $ltr;
    } else {
        $word .=strtoupper($ltr);
    }
}

Так сделать:
$flag=-1;
foreach($wordarr as $ltr) {
   if($flag==-1){
        $word .= $ltr;
   }else{
        $word .=strtoupper($ltr);
   }
   $flag=$flag*(-1);
}
Ответ написан
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Возможно использовать array_map для трансформации массива и затем объединить в строоку:
<?php
$word = "Lorem ipsum dolor sit amet consectetur adipisicing elit.";
$wordarr = str_split($word);

$converted_letters = array_map(
	function($i, $l) {
		return $i % 2 == 0 ? strtoupper($l) : strtolower($l);
	},
	array_keys($wordarr),
	$wordarr
);

echo implode($converted_letters);


Share PHP code
Ответ написан
kawabanga
@kawabanga
1) зачем вы даете переменной значение, а потом переписываете его?
2) foreach($wordarr as $key=>$ltr) -> $key % 2 == 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы