Я смог написать ее только использую встр. функции. Но она работает не точь в точь как в мануале и после выяснилось, что нельзя использовать встр. функции. 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; } } }
Вероятно в вашем задании имеется в виду использование "Доступ к символу в строке и его изменение" https://www.php.net/manual/ru/language.types.string.php совместно с циклом for() и конкатенацией.
PHP: <?php function sub($string, $replace, $offset, $length = null) { if ((string)$string === "Array") { foreach ($string as $key => $value) { $currentReplace = (string)$replace === "Array" ? $replace[$key] ?? '' : $replace; $currentOffset = (string)$offset === "Array" ? $offset[$key] ?? 0 : (int)$offset; $currentLength = (string)$length === "Array" ? $length[$key] ?? null : (int)$length; $string[$key] = sub($value, $currentReplace, $currentOffset, $currentLength); } return $string; } $count = 0; while ($string[$count] ?? false) { $count++; } $offset = $offset < 0 ? $offset + $count : $offset; $length = $length ?? $count; $start = $end = ''; for ($i = 0, $j = 0; $i < $count; $i++) { if ($offset > $i) { $start .= $string[$i]; continue; } if ($length === 0) { $end = $string; break; } if ( ($length > 0 && ++$j > $length) || ($length < 0 && $i >= ($count + $length)) ) { $end .= $string[$i]; } } return $start . $replace . $end; } $var = 'ABCDEFGH:/MNRPQR/'; echo "Оригинал: $var<hr />\n"; echo "1 -------------------------<br />\n"; echo sub($var, 'bob', 10, -1) . "<br />\n"; echo substr_replace($var, 'bob', 10, -1) . "<br /><br />\n"; echo "2 -------------------------<br />\n"; echo sub($var, 'bob', 0) . "<br />\n"; echo substr_replace($var, 'bob', 0) . "<br /><br />\n"; echo "3 -------------------------<br />\n"; echo sub($var, 'bob', 0, strlen($var)) . "<br />\n"; echo substr_replace($var, 'bob', 0, strlen($var)) . "<br /><br />\n"; echo "4 -------------------------<br />\n"; echo sub($var, 'bob', 0, 0) . "<br />\n"; echo substr_replace($var, 'bob', 0, 0) . "<br /><br />\n"; echo "5 -------------------------<br />\n"; echo sub($var, 'bob', 10, 1) . "<br />\n"; echo substr_replace($var, 'bob', 10, 1) . "<br /><br />\n"; echo "6 -------------------------<br />\n"; echo sub($var, 'bob', 10, -1) . "<br />\n"; echo substr_replace($var, 'bob', 10, -1) . "<br /><br />\n"; echo "7 -------------------------<br />\n"; echo sub($var, 'bob', -7, -1) . "<br />\n"; echo substr_replace($var, 'bob', -7, -1) . "<br /><br />\n"; echo "8 -------------------------<br />\n"; echo sub($var, '', 10, -1) . "<br />\n"; echo substr_replace($var, '', 10, -1) . "<br /><br />\n"; echo "9 -------------------------<br />\n"; echo sub($var, 'bob', 1, 3) . "<br />\n"; echo substr_replace($var, 'bob', 1, 3) . "<br /><br />\n"; echo "10 -------------------------<br />\n"; echo sub($var, 'bob', -1, 3) . "<br />\n"; echo substr_replace($var, 'bob', -1, 3) . "<br /><br />\n"; echo "11 -------------------------<br />\n"; echo '<pre>'; var_dump( substr_replace( ['ABCDEFGH:/MNRPQR/', 'ABCDEFGH:/MNRPQR/', 'ABCDEFGH:/MNRPQR/'], ['bob1', 'bob2', 'bob3'], [10, 1, 4], [2, 2, -5] ) ); echo '</pre>'; echo '<pre>'; var_dump( sub( ['ABCDEFGH:/MNRPQR/', 'ABCDEFGH:/MNRPQR/', 'ABCDEFGH:/MNRPQR/'], ['bob1', 'bob2', 'bob3'], [10, 1, 4], [2, 2, -5] ) ); echo '</pre>';
@Aleksandr.B, только вот PHP: (string)$replace === "Array" на PHP: "array" === getType($replace) заменил бы )