Использовать заглавную букву для каждой второй буквы в разнесенном массиве

#php #uppercase #lowercase

#php #верхний регистр #нижний регистр

Вопрос:

Изначально я опубликовал вопрос, чтобы найти решение для использования заглавной буквы для каждой второй буквы в строке. К счастью, Алекс @ SOF смог предложить отличное решение, однако я не смог заставить его работать с массивом… Чтобы было ясно, что я пытаюсь сделать в этом случае, это разнести кавычки, заглавную букву для каждой второй буквы в массиве, а затем разбить их обратно.

 if (stripos($data, 'test') !== false) {
$arr = explode('"', $data);

$newStr = '';
foreach($arr as $index => $char) {
$newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
}

$data = implode('"', $arr);
}
  

Комментарии:

1. Вы имеете в виду, что вам нужны только альтернативные заглавные буквы внутри " разделенных частей вашей строки, например, вывод должен быть hello "HoW ArE YoU DoInG?" .

2. Я немного боюсь того, что вы делаете с этим текстом, заполненным заглавными буквами через каждую вторую букву

3. @Ariel Я возился с созданием шифра в качестве забавного проекта с моим сыном, который, казалось бы, нечитаем без php-ключа, который будет выполнять преобразование, замены и т.д…

4. Я написал ответ, который делает это 🙂

Ответ №1:

Для использования анонимной функции требуется >= PHP 5.3. Если нет, просто сделайте обратный вызов обычной функцией. Вы могли бы использовать create_function() , но это довольно уродливо.

 $str = '"hello" how you "doing?"';

$str = preg_replace_callback('/"(. ?)"/', function($matches) {
  $newStr = '';
   foreach(str_split($matches[0]) as $index => $char) {
       $newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
   }
   return $newStr;

}, $str);

var_dump($str);
  

Вывод

 string(24) ""hElLo" how you "dOiNg?""
  

CodePad.

Если вы хотите поменять регистр, поменяйте местами вызовы strtolower() и strtoupper() .

Ответ №2:

Это то, что вы ищете?

  foreach($data as $key => $val)
    {
       if($key%2==0) $data[$key] = strtoupper($data[$key]);
       else $data[$key] = strtolower($data[$key]);
    }
  

Ответ №3:

Или …. вместо использования регулярного выражения вы могли бы просто даже не использовать метод explode, а использовать любой другой символ и заглавными буквами. Вот пример:

 $test = "test code here";

        $count = strlen($test);
        echo "Count = " . $count . '<br/>';
        for($i = 0; $i < $count; $i  )
        {
            if($i % 2 == 0)
            {
                $test[$i] = strtolower($test[$i]);
            }
            else 
            {
                $test[$i] = strtoupper($test[$i]);
            }
        }
        echo "Test = " . $test;
  

Секрет заключается в операторе modulus . 😉

Редактировать: Черт возьми, я только что заметил, что сообщение выше меня Джордана Арсено уже отправило этот ответ… Я застрял на ответе регулярного выражения, я пропустил это:-/ извините, Джордан, вы уже попали в точку.