#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?""
Если вы хотите поменять регистр, поменяйте местами вызовы 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 . 😉
Редактировать: Черт возьми, я только что заметил, что сообщение выше меня Джордана Арсено уже отправило этот ответ… Я застрял на ответе регулярного выражения, я пропустил это:-/ извините, Джордан, вы уже попали в точку.