Преобразование строк
Помогите пожалуйста новичку с задачей. В функцию в качестве аргумента передается строка. Нужно разбить эту строку в массив по 2 символа в каждом значении. Если число символов в каждом значении четное, т.е 2 - массив просто выводим вида ['ab', 'cd', 'ef'], а если в последнем значении нечетное количество символов, то к последнему символу добавляется подчеркивание. Буду очень признательна, если потратите время на объяснение. Заранее всем спасибо. Вот то, что я наваяла:
function strPrint($str) {
$tmp = str_split($str, 2);
// print_r($tmp);
foreach ($tmp as $value) {
if (strlen($value) == 2){
$tmp = $value;
var_dump($tmp);
}
if (strlen($value) != 2) {
//$value.= '_';
$tmp = $value.= '_';
var_dump($tmp);
}
}
}
strPrint('0123456789bcdfghjkmnpqrstvwxy');
Ответы (2 шт):
Очень просто. Алгоритм действий примерно такой:
- Преобразуем строку в массив с помощью str_split (что Вы уже сделали)
- Получаем последний элемент массива и проверяем, сколько в нём символов
- Если в элементе только один символ, то удаляем последний элемент из массива, создаём новый и добавляем его в массив
В коде это будет выглядеть примерно так:
function splitAndReplace($string) {
$splitString = str_split($string, 2);
$lastValue = end($splitString);
if (mb_strlen($lastValue) % 2 !== 0) {
array_pop($splitString);
$splitString[] = $lastValue . '_';
}
return $splitString;
}
print_r(splitAndReplace('0123456789bcdfghjkmnpqrstvwxy'));
Условие if (mb_strlen($lastValue) % 2 !== 0), проверяет количество символов на чётность, но можно конечно заменить на конкретное число: if (mb_strlen($lastValue) !== 2)
Результат:
Array
(
[0] => 01
[1] => 23
[2] => 45
[3] => 67
[4] => 89
[5] => bc
[6] => df
[7] => gh
[8] => jk
[9] => mn
[10] => pq
[11] => rs
[12] => tv
[13] => wx
[14] => y_
)
$str = '0123456789bcdfghjkmnpqrstvwxy';
if (strlen($str) % 2) {
print_r(str_split($str.'_', 2));
} else {
print_r(str_split($str, 2));
}