Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Пытаюсь записать все картинки в массив, но берет только одну. Где ошибся?

Пытаюсь записать все картинки в массив, но берет только одну. Где ошибся?


     25.02.2017    Все вопросы » Общие вопросы по PHP    1124

вопрос
В полном описании вставляется n-ное кол-во картинок. Мне необходимо среди всего текста найти их все, записать в массив, затем прогнать массив через foreach в котором выполнить поиск и замену текста. Что делаю не так, может функцию другую использовать..
Ссылки все имеют вид http://img-fotki yandex ru/get/166616/310023662.4867/0_7dcf26_6f8cda99_orig

preg_match('#http://(.+?)_orig#i', $row['full_story'], $kartinkafull);
		
		foreach ($kartinkafull as $key => $value) {
			list($width, $height, $type, $attr) = getimagesize($kartinkafull[$key]);
			$row['full_story'] = str_replace( $kartinkafull[$key].'" alt', $kartinkafull[$key].'\" height=\"'.$height.'\" alt', $row['full_story'] );
		}

так тоже берется и меняется только одна

preg_match('#http://(.+?)_orig#i', $row['full_story'], $kartinkafull);
		
		foreach ($kartinkafull as $key => $value) {
			list($width, $height, $type, $attr) = getimagesize($value);
			$row['full_story'] = str_replace( $value.'" alt', $value.'\" height=\"'.$height.'\" alt', $row['full_story'] );
		}

Ответа пока нет


5 комментариев

nowheremany
Эксперт

nowheremany - 26 февраля 2017 01:03 -

Посмотрите preg_match_all c флагом PREG_SET_ORDER

Благодарность принимаю тут Связь

DomiTori
Юзер

DomiTori - 26 февраля 2017 08:18 -

Спасибо за подсказку, в целом заработало.
preg_match_all('#http://(.+?)_orig#i', $row['full_story'], $kartinkafull, PREG_SET_ORDER);
		
		foreach ($kartinkafull as $key => $value) {
			list($width, $height, $type, $attr) = getimagesize($kartinkafull[$key][0]);
			$row['full_story'] = str_replace( $kartinkafull[$key][0].'" alt', $kartinkafull[$key][0].'" height="'.$height.'" alt', $row['full_story'] );
		}

только страница стала загружаться секунд 5. Можно конечно кеш прикрутить к этому коду, может есть вариант оптимизировать его?

nowheremany
Эксперт

nowheremany - 26 февраля 2017 13:38 -

что бы сделать замену через регулярное выражение используйте preg_replace или preg_replace_callback.
Чтобы составлять регулярки мне очень помогает этот ресурс https://regex101.com/

Благодарность принимаю тут Связь

DomiTori
Юзер

DomiTori - 26 февраля 2017 15:06 -

спасибо за ресурс. не думаю что мне в замене ссылки на такую же только с height поможет замена через регулярки preg_replace. или ошибаюсь?

nowheremany
Эксперт

nowheremany - 26 февраля 2017 16:21 -

preg_replace_callback('#http://(.+?)_orig#i',$row['full_story'],function($m){
list($width, $height, $type, $attr) = getimagesize($m[0]);
			return $m[0].'" height="'.$height.';
});


Но тут скорее всего нужно кэш использовать. Проблема не в замене, а в getimagesize

Благодарность принимаю тут Связь

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх