Задачка: В строку произвольной длины в любом(rand) месте вставить ключевое слово не изменяя длину заданной строки(замена). Решить в одну строку (в один оператор ";" ) и без циклов. Сам придумал, сам решил, но вдруг есть решение ещё лучше. Спойлер: Моё решение PHP: function replacer($str, $adjust){ return implode("", array_replace( str_split($str), array_combine( array_keys( array_fill( mt_rand(0, count(str_split($str)) - count(str_split($adjust))), count(str_split($adjust)), 1 ) ), str_split($adjust) ) ) ); }
Спойлер PHP: function replacer($str, $adjust){ return mb_substr($str, 0, $rnd = mt_rand(0, mb_strlen($str) - mb_strlen($adjust))) . $adjust . mb_substr($str, $rnd + mb_strlen($adjust)); } Если поддержка многобайтовых кодировок не нужна, то подойдёт substr_replace PHP: function replacer($str, $adjust){ return substr_replace($str, $adjust, mt_rand(0, strlen($str) - strlen($adjust)), strlen($adjust) ); }
Спойлер: PREG_REPLACE PHP: function preg_replacer($in, $str) { return preg_replace('/(?<=.{'.mt_rand(0,strlen($in) - strlen($str)).'}).{'.strlen($str).'}/', $str, $in, 1); }