Преобразование строк

Помогите пожалуйста новичку с задачей. В функцию в качестве аргумента передается строка. Нужно разбить эту строку в массив по 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 шт):

Автор решения: MyZik

Очень просто. Алгоритм действий примерно такой:

  • Преобразуем строку в массив с помощью 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_
)
→ Ссылка
Автор решения: Dhunga
$str = '0123456789bcdfghjkmnpqrstvwxy';
if (strlen($str) % 2) {
    print_r(str_split($str.'_', 2));
} else {
    print_r(str_split($str, 2));
}
→ Ссылка