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

17
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'>"
    
задан VACIndustries 11.10.2011 в 22:30
источник
  • Что такое $ img_tag? –  jprofitt 11.10.2011 в 22:31
  • var_dump ($ img_tag), пожалуйста –  RiaD 11.10.2011 в 22:32
  • Я предполагаю, что это результат чего-то вроде операции узла с SimpleXML? –  Michael Berkowski 11.10.2011 в 22:33

4 ответа

32

Предполагая, что $img_tag является объектом некоторого типа, а не соответствующей строкой, добавьте $img_tag в строку внутри []

preg_match_all("/(alt|title|src)=('[^']*')/i",(string)$img_tag, $img[(string)$img_tag]);
//------------------------------------------------------------------^^^^^^^^^

Некоторые типы объектов, в частности SimpleXMLElement , например, вернут представление строки в print/echo через магический метод __toString() , но не может стоять как обычные строки. Попытки использовать их в качестве ключей массива будут давать ошибку illegal offset type , если вы не передадите их соответствующим строкам через (string)$obj .     

ответ дан Michael Berkowski 11.10.2011 в 22:32
источник
  • теперь, когда я добавляю (строку) в эти два местоположения, он не дает строки, которые мне нужны, когда я печатаю_r $ img .... который является местоположением изображения, любыми идеями? –  VACIndustries 11.10.2011 в 23:16
  • Опубликовать print_r ($ result), чтобы мы могли видеть, с чего вы начинаете. –  Michael Berkowski 12.10.2011 в 00:44
  • Это тоже стоит посмотреть. Хороший звонок, я никогда раньше не сталкивался с этим. us3.php.net/language.types.type-juggling.php –  Jazzy 20.11.2012 в 21:00
9

Смотрите первый комментарий к этому отчету об ошибке PHP :

  

Вы не можете использовать массивы или объекты в качестве ключей. Это приведет к предупреждению: тип недопустимого смещения. Проверьте свой код.

Убедитесь, что $img_tag имеет соответствующий тип переменной.

    
ответ дан eykanal 11.10.2011 в 22:34
источник
1

$result является 2-мерным массивом. Таким образом, $img_tag должен быть массивом.

Но только целые числа и строки могут использоваться как смещение

    
ответ дан RiaD 11.10.2011 в 22:35
источник
-1
foreach( $result[0] as $img_tag)

работает

    
ответ дан NizNiz 18.01.2016 в 04:32
источник