【问题标题】:PHP Illegal offset typePHP非法偏移类型
【发布时间】:2016-01-18 12:02: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
}

有人吗?我要为此撕毁我的头发......

这是我的 $img_tag 的 var_dump

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

【问题讨论】:

  • 我猜这是使用 SimpleXML 进行节点操作的结果?

标签: php warnings


【解决方案1】:

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

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 将它们转换为正确的字符串。

【讨论】:

  • 现在当我将(字符串)添加到这两个位置时,它不会在我 print_r $img....时提供我需要的字符串,这是图像位置,有什么想法吗?
  • 发布 print_r($result) 以便我们了解您的开始。
  • 这个也值得一看。好电话,我以前从未遇到过这种情况。 us3.php.net/language.types.type-juggling.php
【解决方案2】:

查看this PHP bug report的第一条评论:

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

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

【讨论】:

    【解决方案3】:

    $result 是二维数组。所以,$img_tag 应该是一个数组。

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

    【讨论】:

      【解决方案4】:
      foreach( $result[0] as $img_tag)
      

      有效

      【讨论】:

      • 这是我的解决方案
      猜你喜欢
      • 1970-01-01
      • 2011-01-12
      • 2013-03-24
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2019-07-16
      相关资源
      最近更新 更多