PHP非法偏移类型

时间:2011-10-11 20:30:09

标签: php warnings

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
}

任何?我要把头发撕掉了......

这是我的$ img_tag

的var_dump
array(1) {
  [0]=>
  string(97) "<img alt='' src='http://pete1.netsos.com/site/files/newsletter/banner.jpg' align='' border='0px'>"

4 个答案:

答案 0 :(得分:34)

假设$img_tag是某种类型的对象,而不是正确的字符串,请将$img_tag强制转换为[]

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

某些对象类型,例如SimpleXMLElement,会通过magic method __toString()将字符串表示形式返回给print/echo,但不能作为常规字符串。尝试将它们用作数组键将产生illegal offset type错误,除非您通过(string)$obj将它们转换为正确的字符串。

答案 1 :(得分:9)

请参阅this PHP bug report的第一条评论:

  

您不能将数组或对象用作键。这样做会导致警告:非法偏移类型。检查你的代码。

确保$img_tag属于适当的变量类型。

答案 2 :(得分:1)

$result是二维数组。因此,$img_tag应该是一个数组。

但只有整数和字符串可以用作偏移量

答案 3 :(得分:-1)

foreach( $result[0] as $img_tag)

它有效