PHP недопустимый тип смещения

#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. это решение для меня