За последние 24 часа нас посетили 17744 программиста и 1922 робота. Сейчас ищут 983 программиста ...

Втиснуть в строку

Тема в разделе "PHP для новичков", создана пользователем Abyss, 18 июн 2018.

  1. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Задачка:
    В строку произвольной длины в любом(rand) месте вставить ключевое слово не изменяя длину заданной строки(замена).
    Решить в одну строку (в один оператор ";" ) и без циклов.

    Сам придумал, сам решил, но вдруг есть решение ещё лучше.
    PHP:
    1. function replacer($str, $adjust){
    2.     return implode("",
    3.         array_replace(
    4.             str_split($str),
    5.             array_combine(
    6.                 array_keys(
    7.                     array_fill(
    8.                         mt_rand(0, count(str_split($str)) - count(str_split($adjust))),
    9.                         count(str_split($adjust)),
    10.                         1
    11.                     )
    12.                 ),
    13.                 str_split($adjust)
    14.             )
    15.         )
    16.     );
    17. }
     
  2. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    PHP:
    1. function replacer($str, $adjust){
    2.     return mb_substr($str, 0, $rnd = mt_rand(0, mb_strlen($str) - mb_strlen($adjust))) . $adjust .
    3.            mb_substr($str, $rnd + mb_strlen($adjust));
    4. }
    Если поддержка многобайтовых кодировок не нужна, то подойдёт substr_replace
    PHP:
    1. function replacer($str, $adjust){
    2.     return substr_replace($str,
    3.                           $adjust,
    4.                           mt_rand(0, strlen($str) - strlen($adjust)),
    5.                           strlen($adjust)
    6.     );
    7. }
     
    Abyss нравится это.
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    PHP:
    1. function preg_replacer($in, $str) {
    2.    return preg_replace('/(?<=.{'.mt_rand(0,strlen($in) - strlen($str)).'}).{'.strlen($str).'}/', $str, $in, 1);
    3. }
     
    Abyss нравится это.