Вставить пробел перед символом верхнего регистра в php
Имеется такой код:
$my_str = 'ThisIsJustString'
for ($i = 0; $i < strlen($my_str); $i++)
{
if (ctype_upper($my_str[$i]) && $i!=0)
{
$splitted_str = str_split($my_str, $i);
$result_str = implode(" ", $splitted_str);
}
}
Он у меня разделяет перед последним символом верхнего регистра, а мне нужно перед каждым. Как это можно сделать?
Ответы (3 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Логика такова:
- Бежим циклом по каждому символу строки
- На каждой итерации сравниваем текущий символ и его значение в верхнем регистре (т.е. символ по индексу
$iравенstrtoupper(символ по индексу $i)) - Если п.2 выдаёт
true, то в строку с номером$i - 1добавляем пробел а также прибавить к$iединичку, т.к. если не прибавить, то на итерации цикл попадёт опять на тот же символ (из-за смещённой строки) и цикл может стать бесконечным
Чтобы не пришлось мудрить как в п.3, можно создать новую переменную перед циклом. Новую строку и конкатенировать символы предыдущей в неё, а при условии соблюдения п.2 конкатенировать в переменную пробел и символ по индексу
Автор решения: Виктор
→ Ссылка
Проще так:
$my_str = 'ThisIsJustString';
$result_str = '';
for ($i = 0; $i < strlen($my_str); $i++)
{
if (ctype_upper($my_str[$i]) && $i!=0)
{
$result_str .= ' ';
}
$result_str .= $my_str[$i];
}
print($result_str);
Output: This Is Just String
Автор решения: Anton Mironov
→ Ссылка
Можно воспользоваться регуляркой:
$my_str = 'ThisIsJustString';
$result_str = preg_replace('/(?<! )(?<!^)[A-Z]/',' $0', $my_str);
echo $result_str; // This Is Just String