serii81
@serii81
Я люблю phр...

Почему не могу заменить элемент массива php?

$string = 'Существует метафорическое представление о тексте, как о лабиринте, в котором блуждают его читатели и исследователи, или спутанном клубке, который подлежит распутыванию. Не существует универсальной теории выхода из лабиринта или распутывания клубков, есть лишь некоторые эвристические принципы, которым бывает полезно следовать. Однако когда вы приступаете к распутыванию клубка, у вас заранее не может быть гарантий, что вы его сумеете распутать до конца; равным образом, не сумев его распутать, вы не имеете права утверждать, что этот клубок является нераспутываемым в принципе.';
	function changeWord($string){
		$arr = explode(' ', $string);
		print_r($arr);
		foreach ( $arr as $item ) {
			if($item == 'его'){
				$item = '12345';
			}
		}
		print_r($arr);
		$string = implode(' ', $arr);
		return $string;
	}

Почему не могу заменить item?
  • Вопрос задан
  • 309 просмотров
Решения вопроса 3
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Ответ написан
Комментировать
@vyrkmod
Пишу на php. И не стыдно.
Примерно так:
foreach($array as $key => $value) {
    if($value = 1) {
        $array[$key] = 2;
    }
}

В $item идёт передача по значению, а не по ссылке.
Ответ написан
Комментировать
sanek_os9
@sanek_os9
Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
Потому что вы не заменяете элемент массива, вы переопределяете переменную $item
function changeWord(string $string): string
{
    $arr = explode(' ', $string);
    print_r($arr);
    for ($i = 0; $i < sizeof($arr); $i++) {
        if($arr[$i] == 'его'){
            $arr[$i] = '12345';
        }
    }
    print_r($arr);
    $string = implode(' ', $arr);
    return $string;
}

В вашем же коде нужно
foreach ( $arr as $item ) {
заменить на
foreach ( $arr as $key =>$item ) {
а это
$item = '12345';
заменить на
$arr[$key] = '12345';
Так же, для вашей задачи возможно подойдет
$str = ' его строка';
$str = str_replace('его', '12345', $str);
# выведет: 12345 строка
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽