#php #warnings
#php #предупреждения
Вопрос:
Warning: Illegal offset type in /email_HANDLER.php on line 85
$final_message = str_replace($from, $to, $final_message);
preg_match_all('/<img[^>] >/i',$final_message, $result);
$img = array();
foreach($result as $img_tag)
{
preg_match_all("/(alt|title|src)=('[^']*')/i",(string)$img_tag, $img[$img_tag]); //LINE 85
}
Кто-нибудь? Я собираюсь рвать на себе волосы из-за этого…
вот мой var_dump из $img_tag
array(1) {
[0]=>
string(97) "<img alt='' src='http://pete1.netsos.com/site/files/newsletter/banner.jpg' align='' border='0px'>"
Комментарии:
1. Я предполагаю, что это результат чего-то вроде операции узла с SimpleXML?
Ответ №1:
Предполагается $img_tag
, что это объект некоторого типа, а не правильная строка, приведенная $img_tag
к строке внутри []
preg_match_all("/(alt|title|src)=('[^']*')/i",(string)$img_tag, $img[(string)$img_tag]);
//------------------------------------------------------------------^^^^^^^^^
Некоторые типы объектов, в частности SimpleXMLElement
, например, будут возвращать строковое представление с print/echo
помощью метода magic __toString()
, но не могут использоваться как обычные строки. Попытки использовать их в качестве ключей массива приведут к illegal offset type
ошибке, если вы не приведете их к правильным строкам через (string)$obj
.
Комментарии:
1. теперь, когда я добавляю (string) в эти два местоположения, он не выдает строки, которые мне нужны, когда я печатаю_r $img …. какие местоположения изображений, есть идеи?
2. Опубликуйте
print_r($result)
, чтобы мы могли видеть, с чего вы начинаете.3. На это тоже стоит обратить внимание. Хороший звонок, я никогда раньше с этим не сталкивался. us3.php.net/language.types.type-juggling.php
Ответ №2:
Смотрите первый комментарий к этому отчету об ошибке PHP:
Вы не можете использовать массивы или объекты в качестве ключей. Это приведет к появлению предупреждения: недопустимый тип смещения. Проверьте свой код.
Убедитесь, что $img_tag
это значение имеет соответствующий тип переменной.
Ответ №3:
$result
является 2-мерным массивом.Итак, $img_tag
должен быть массив.
Но в качестве смещения могут использоваться только целые числа и строки
Ответ №4:
foreach( $result[0] as $img_tag)
это работает
Комментарии:
1. это решение для меня