Всегда готов признать свою ошибку и по поводу неравномерности я действительно погорячился. Ваш алгоритм решает поставленную задачу (Кстати, это к вопросу о понятности кода)
Хотите разбор, кода, извольте:
Циклов в Вашей программе 2 или foreach вы таковым не считаете? Его вполне можно заменить великолепной функцией implode
Излишний расход памяти - это использование функции explоde, которая по сути делает копию строки в памяти представляя ее содержимое в виде массива.
Неведомые манипуляции со знаком, как и определение переменной $shifft_key совершенно излишни, тот же самый результат вы получите используя начало каждого диапазона и его длину.
Зачем нужен массив $pos - он же нигде не используется. Здесь мы еще раз возвращаемся к ненужному расходу памяти.
array_splice($nl, $pos[$i], 0, $text_key); - зачем этот вызов? не проще ли добывить key к существующему элементу массива? Операции вставки в середину массива, как правило, очень дороги
$nl[$pos[$i]] .= " $text_key"; - в данном случае - это эквивалентная строка (с учетом дальнейшей обработки)
$key_pos=$key_pos+floor($col/$col_keys) - в каждой итерации цикла вы делаете одно и то же вычисление floor($col/$col_keys), лучше сделать это перед циклом, тем более что там вы вычисляете аналогичную величину. Это к вопросу неоптимальности.
В моем варианте 5 (значимых) строк и не одного комментария, но почему-то он кажется мне яснее. Возможно, это лишь дело вкуса.
Кстати, равномерность тексте не зависит от того, что Вы используете для определения размера каждого кусочка для вставки кея, слова или символы. Можете проверить на практике, или поверить мне на слово.
Хотите разбор, кода, извольте:
Циклов в Вашей программе 2 или foreach вы таковым не считаете? Его вполне можно заменить великолепной функцией implode
Излишний расход памяти - это использование функции explоde, которая по сути делает копию строки в памяти представляя ее содержимое в виде массива.
Неведомые манипуляции со знаком, как и определение переменной $shifft_key совершенно излишни, тот же самый результат вы получите используя начало каждого диапазона и его длину.
Зачем нужен массив $pos - он же нигде не используется. Здесь мы еще раз возвращаемся к ненужному расходу памяти.
array_splice($nl, $pos[$i], 0, $text_key); - зачем этот вызов? не проще ли добывить key к существующему элементу массива? Операции вставки в середину массива, как правило, очень дороги
$nl[$pos[$i]] .= " $text_key"; - в данном случае - это эквивалентная строка (с учетом дальнейшей обработки)
$key_pos=$key_pos+floor($col/$col_keys) - в каждой итерации цикла вы делаете одно и то же вычисление floor($col/$col_keys), лучше сделать это перед циклом, тем более что там вы вычисляете аналогичную величину. Это к вопросу неоптимальности.
В моем варианте 5 (значимых) строк и не одного комментария, но почему-то он кажется мне яснее. Возможно, это лишь дело вкуса.
Кстати, равномерность тексте не зависит от того, что Вы используете для определения размера каждого кусочка для вставки кея, слова или символы. Можете проверить на практике, или поверить мне на слово.