За последние 24 часа нас посетили 22335 программистов и 1146 роботов. Сейчас ищут 636 программистов ...

Помогите пожалуйста написать функцию substr_replace не используя встроенные функции

Тема в разделе "PHP для новичков", создана пользователем Dmitry_php, 17 мар 2023.

  1. Dmitry_php

    Dmitry_php Новичок

    С нами с:
    17 мар 2023
    Сообщения:
    3
    Симпатии:
    0
    Я смог написать ее только использую встр. функции. Но она работает не точь в точь как в мануале и после выяснилось, что нельзя использовать встр. функции.
    function sub ($i, $slovo, $ot, $do = null) {
    $y= [];
    $r = count ($i);
    if ($r == 1){
    if ($do === null) {
    $do = strlen($i);
    $b = str_split ($i);
    array_splice ($b, $ot, $do, $slovo);
    $t = implode ($b);
    } else {
    $b = str_split ($i);
    array_splice ($b, $ot, $do, $slovo);
    $t = implode ($b);
    }
    return $t;
    } else {
    foreach ($i as $value){
    if ($do === null) {
    $do = strlen($value);
    $b = str_split ($value);
    array_splice ($b, $ot, $do, $slovo);
    $t = implode ($b);
    $y [] = $t;
    } else {
    $b = str_split ($value);
    $t = array_splice ($b, $ot, $do, $slovo);
    $t = implode ($b);
    $y [] = $t;
    }
    return $y;
    }
    }
    }
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    Да зачем, я лучше в гугле утенка 5 летней давности найду.

     
    dantemgs нравится это.
  3. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Вероятно в вашем задании имеется в виду использование "Доступ к символу в строке и его изменение"
    https://www.php.net/manual/ru/language.types.string.php
    совместно с циклом for() и конкатенацией.
     
  4. Aleksandr.B

    Aleksandr.B Новичок

    С нами с:
    2 фев 2023
    Сообщения:
    152
    Симпатии:
    40
    Адрес:
    Барнаул
    PHP:
    1. <?php
    2.  
    3. function sub($string, $replace, $offset, $length = null)
    4. {
    5.     if ((string)$string === "Array") {
    6.         foreach ($string as $key => $value) {
    7.             $currentReplace = (string)$replace === "Array" ? $replace[$key] ?? '' : $replace;
    8.             $currentOffset = (string)$offset === "Array" ? $offset[$key] ?? 0 : (int)$offset;
    9.             $currentLength = (string)$length === "Array" ? $length[$key] ?? null : (int)$length;
    10.             $string[$key] = sub($value, $currentReplace, $currentOffset, $currentLength);
    11.         }
    12.         return $string;
    13.     }
    14.  
    15.     $count = 0;
    16.     while ($string[$count] ?? false) {
    17.         $count++;
    18.     }
    19.  
    20.     $offset = $offset < 0 ? $offset + $count : $offset;
    21.     $length = $length ?? $count;
    22.     $start = $end = '';
    23.  
    24.     for ($i = 0, $j = 0; $i < $count; $i++) {
    25.         if ($offset > $i) {
    26.             $start .= $string[$i];
    27.             continue;
    28.         }
    29.  
    30.         if ($length === 0) {
    31.             $end = $string;
    32.             break;
    33.         }
    34.  
    35.         if (
    36.             ($length > 0 && ++$j > $length) ||
    37.             ($length < 0 && $i >= ($count + $length))
    38.         ) {
    39.             $end .= $string[$i];
    40.         }
    41.     }
    42.     return $start . $replace . $end;
    43. }
    44.  
    45. $var = 'ABCDEFGH:/MNRPQR/';
    46. echo "Оригинал: $var<hr />\n";
    47.  
    48. echo "1 -------------------------<br />\n";
    49. echo sub($var, 'bob', 10, -1) . "<br />\n";
    50. echo substr_replace($var, 'bob', 10, -1) . "<br /><br />\n";
    51.  
    52. echo "2 -------------------------<br />\n";
    53. echo sub($var, 'bob', 0) . "<br />\n";
    54. echo substr_replace($var, 'bob', 0) . "<br /><br />\n";
    55.  
    56. echo "3 -------------------------<br />\n";
    57. echo sub($var, 'bob', 0, strlen($var)) . "<br />\n";
    58. echo substr_replace($var, 'bob', 0, strlen($var)) . "<br /><br />\n";
    59.  
    60. echo "4 -------------------------<br />\n";
    61. echo sub($var, 'bob', 0, 0) . "<br />\n";
    62. echo substr_replace($var, 'bob', 0, 0) . "<br /><br />\n";
    63.  
    64. echo "5 -------------------------<br />\n";
    65. echo sub($var, 'bob', 10, 1) . "<br />\n";
    66. echo substr_replace($var, 'bob', 10, 1) . "<br /><br />\n";
    67.  
    68. echo "6 -------------------------<br />\n";
    69. echo sub($var, 'bob', 10, -1) . "<br />\n";
    70. echo substr_replace($var, 'bob', 10, -1) . "<br /><br />\n";
    71.  
    72. echo "7 -------------------------<br />\n";
    73. echo sub($var, 'bob', -7, -1) . "<br />\n";
    74. echo substr_replace($var, 'bob', -7, -1) . "<br /><br />\n";
    75.  
    76.  
    77. echo "8 -------------------------<br />\n";
    78. echo sub($var, '', 10, -1) . "<br />\n";
    79. echo substr_replace($var, '', 10, -1) . "<br /><br />\n";
    80.  
    81.  
    82. echo "9 -------------------------<br />\n";
    83. echo sub($var, 'bob', 1, 3) . "<br />\n";
    84. echo substr_replace($var, 'bob', 1, 3) . "<br /><br />\n";
    85.  
    86.  
    87. echo "10 -------------------------<br />\n";
    88. echo sub($var, 'bob', -1, 3) . "<br />\n";
    89. echo substr_replace($var, 'bob', -1, 3) . "<br /><br />\n";
    90.  
    91.  
    92. echo "11 -------------------------<br />\n";
    93. echo '<pre>';
    94.         ['ABCDEFGH:/MNRPQR/', 'ABCDEFGH:/MNRPQR/', 'ABCDEFGH:/MNRPQR/'],
    95.         ['bob1', 'bob2', 'bob3'],
    96.         [10, 1, 4],
    97.         [2, 2, -5]
    98.     )
    99. );
    100. echo '</pre>';
    101.  
    102. echo '<pre>';
    103.     sub(
    104.         ['ABCDEFGH:/MNRPQR/', 'ABCDEFGH:/MNRPQR/', 'ABCDEFGH:/MNRPQR/'],
    105.         ['bob1', 'bob2', 'bob3'],
    106.         [10, 1, 4],
    107.         [2, 2, -5]
    108.     )
    109. );
    110. echo '</pre>';
     
    #4 Aleksandr.B, 4 апр 2023
    Последнее редактирование: 4 апр 2023
  5. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
    @Aleksandr.B, только вот
    PHP:
    1. (string)$replace === "Array"
    на
    PHP:
    1. "array" === getType($replace)
    заменил бы )
     
  6. Aleksandr.B

    Aleksandr.B Новичок

    С нами с:
    2 фев 2023
    Сообщения:
    152
    Симпатии:
    40
    Адрес:
    Барнаул
    В таком случае будут использованы встроенные функции php, а в тз их нельзя использовать.
     
  7. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
    а, ну тогда кошернее всё-таки так:
    PHP:
    1. $replace . "" === $replace