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 ответа

34

Предполагая, что $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 :

You cannot use arrays or objects as keys. Doing so will result in a warning: Illegal offset type. Check your code.

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

    
ответ дан eykanal 11.10.2011 в 22:34
1

$result - это двумерный массив. Поэтому $img_tag должен быть массивом.

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

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

это работает

    
ответ дан NizNiz 18.01.2016 в 04:32