php - 如何修复此非法偏移类型错误

Ste*_*ven 80 php arrays

我越来越

非法抵消类型

此代码的每次迭代都会出错.这是代码:

$s = array();
for($i = 0; $i < 20; $i++){
    $source = $xml->entry[$i]->source;
    $s[$source] += 1;    
}

print_r($s)
Run Code Online (Sandbox Code Playgroud)

zom*_*bat 137

当您尝试使用对象数组作为索引键访问数组索引时,会发生非法的偏移类型错误.

例:

$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type
Run Code Online (Sandbox Code Playgroud)

您的$xml数组包含一个对象或数组$xml->entry[$i]->source的某个值$i,当您尝试将其用作索引键时$s,您会得到该警告.您必须确保$xml包含您想要的内容以及您正确访问它.


小智 23

trim($source)之前 使用$s[$source].

  • 修剪一个对象只是将它强制转换为字符串的一种非显而易见的方法(简单的方法是`(string)$ source`),结果完全取决于它的[__toString()](http://php.net/manual /en/language.oop5.magic.php#object.tostring)实现.如果你有一个`SimpleXML`对象(显然是每个人都假设的东西,但在问题中没有真正陈述过),它就有效. (5认同)
  • 我认为这是这个问题的正确答案,而不是[zombat](http://stackoverflow.com/questions/2732451/php-how-do-i-fix-this-illegal-offset-type-error#回答-2732502) (3认同)

bri*_*n_d 5

在尝试获取它的属性之前检查 $xml->entry[$i] 是否存在并且是否是一个对象

 if(isset($xml->entry[$i]) && is_object($xml->entry[$i])){
   $source = $xml->entry[$i]->source;          
   $s[$source] += 1;
 }
Run Code Online (Sandbox Code Playgroud)

或 $source 可能不是合法的数组偏移量,而是数组、对象、资源或可能为 null

  • 唯一正确的答案。您必须检查数组中元素是否存在。如果它不存在,您将无法访问它的属性。 (3认同)