Извиняйте, если не корректно сформировал вопрос. Суть следующая, есть вот такой код:
foreach($group AS $product){
if (isset($product['group_title']) && $product['group_title']) {
$group_id++;
...
if ($parametri["show_image"] == 1) {
if (isset($product['images'])) {
$firsttime = true;
echo '<td class="cell_image">';
foreach ($product['images'] as $image) {
if ($firsttime) {
echo $image->displayMediaThumb('class="product-image"', true, 'rel="catproduct_images_'.$i.'"', true, false);
$firsttime = false;
} else {
echo '<a title="'.$image->product_name.'" rel="catproduct_images_0" href="'.$image->file_url.'"></a>';
}
}
echo '</td>';
}
else {
echo '<td class="cell_image"></td>';
}
}
...
$i++;
Он генерирует html строки с изображением. Мне нужно вытащить из него SRC картинки. Как это сделать ума не приложу, вроде бы просто, ан нет... Помогите разобраться... Заранее благодарю за ответ
<td class="cell_image"><a title="fMEWGS151041" rel="catproduct_images_0" href="https://makcon.ru/images/stories/virtuemart/product/fMEWGS151041.jpg"><img src="/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg" alt="fMEWGS151041" class="product-image" /></a></td>
Если картинка одна, то можно вытащить ссылку из атрибута src с помощью preg_match():
$str = '<td class="cell_image"><a title="fMEWGS151041" rel="catproduct_images_0" href="https://makcon.ru/images/stories/virtuemart/product/fMEWGS151041.jpg"><img src="/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg" alt="fMEWGS151041" class="product-image" /></a></td>';
preg_match('~(?<=src=")[^"]+(?=")~', $str, $arr);
$img = $arr[0] ?? '';
echo $img;
В результате будет строка:
/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg
Если на входе у вас массив, то нужно обрабатывать его в цикле (или подходящими php-функциями), проверяя каждый элемент массива на наличие атрибута src="..."
. Так как в результате уточняющих комментариев не выяснилось, что именно нужно обрабатывать (строку или массив), то я решил написать универсальную функцию, которая будет принимать на вход строку или массив, а в результате возвращать всегда массив (если совпадений не найдено - пустой массив). Код функции:
function get_url($images, $img = []): Array
{
$pcre = function($html)use(&$img){
preg_match('~(?<=src=")[^"]+(?=")~', $html, $arr);
empty($arr[0]) ?: $img[] = $arr[0];
};
if (is_array($images)) {
foreach ($images as $html) {
$pcre($html);
}
} else {
$pcre($images);
}
return $img;
}
Пример использования для массива:
$images = [
'<p><img src="/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg" /></p>',
'<p><img src="/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg" /></p>',
'<p><img src="/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg" /></p>',
'<img src="/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg" />',
'<img src="/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg" />'
];
var_dump( get_url($images) );
Результат:
array (size=5)
0 => string '/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg' (length=64)
1 => string '/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg' (length=64)
2 => string '/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg' (length=64)
3 => string '/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg' (length=64)
4 => string '/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg' (length=64)
Пример использования для строки:
$image = '<p><img src="/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg" /></p>';
var_dump( get_url($image) );
Результат:
array (size=1)
0 => string '/images/stories/virtuemart/product/resized/fMEWGS151041_0x80.jpg' (length=64)
В контексте вашего кода использование будет выглядеть примерно так:
// Объявить мвссив
$images = [];
foreach ($group AS $product) {
if (isset($product['group_title']) && $product['group_title']) {
$group_id++;
if ($parametri["show_image"] == 1) {
if (isset($product['images'])) {
$firsttime = true;
echo '<td class="cell_image">';
foreach ($product['images'] as $image) {
if ($firsttime) {
// Сохранить результат из метода во временную переменную $temp
$temp = $image->displayMediaThumb('class="product-image"', true, 'rel="catproduct_images_'.$i.'"', true, false);
// Передать переменную в get_url(), и получить массив
$images[] = get_url($temp);
$firsttime = false;
} else {
echo '<a title="'.$image->product_name.'" rel="catproduct_images_0" href="'.$image->file_url.'"></a>';
}
}
echo '</td>';
}
else {
echo '<td class="cell_image"></td>';
}
}
$i++;
}
}
// Просмотр полученного массива
var_dump( $images );
Эх, а ларчик просто открывался ))) Суть решения была на поверхности, а именно:
echo '<a title="'.$image->product_name.'" rel="catproduct_images_0" href="'.$image->file_url.'"></a>';
}
тут есть href="'.$image->file_url.'" это и есть ключ к победе )))
$img_src = "/".$image->file_url;
написал вот так чтобы получить путь к картинке далее, был обработчик РАДИО переключатель к нему добавил это:
data-imag="'.$img_src.'"
затем пошел в JS файл обработчика событий радио-переключателя и там:
var d_img = checkboxes[index].getAttribute('data-imag');
получил атрибут ссылки, далее вернул куда мне надо было, вот так:
document.querySelector('img[class="info_cpu"]').setAttribute('src', d_img);
что получил: при клике на радио, вывел инфу о выборе + картинку, для наглядности ссылка на сайт: https://makcon.ru/catalog/create-pc кому интересно, нажмите на иконку над словом "Процессоры" и покликайте на радио переключатели...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Надо присоединится к серверу через fsockopen и отправить несколько пакетов, используя при этом прокси(обеспечить анонимность отправки пакетов)...
ЗдравствуйтеКак правильно составить регулярные выражения PHP, чтобы скрипт отдал ответ при обнаружении ПЕРВЫХ трех чисел - 789? Тоесть, к примеру,...