Steven
Steven

Reputation: 1637

php - How do I fix this illegal offset type error

I'm getting

illegal offset type

error for every iteration of this code. Here's the code :

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

print_r($s)

Upvotes: 119

Views: 310574

Answers (5)

user8387356
user8387356

Reputation: 1

I had a similar problem. As I got a Character from my XML child I had to convert it first to a String (or Integer, if you expect one). The following shows how I solved the problem.

foreach($xml->children() as $newInstr){
        $iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
        $arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
    }

Upvotes: 0

Zafer
Zafer

Reputation: 271

Use trim($source) before $s[$source].

Upvotes: 27

brian_d
brian_d

Reputation: 11360

check $xml->entry[$i] exists and is an object before trying to get a property of it

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

or $source might not be a legal array offset but an array, object, resource or possibly null

Upvotes: 5

zombat
zombat

Reputation: 94147

Illegal offset type errors occur when you attempt to access an array index using an object or an array as the index key.

Example:

$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type

Your $xml array contains an object or array at $xml->entry[$i]->source for some value of $i, and when you try to use that as an index key for $s, you get that warning. You'll have to make sure $xml contains what you want it to and that you're accessing it correctly.

Upvotes: 193

Byron Whitlock
Byron Whitlock

Reputation: 53851

There are probably less than 20 entries in your xml.

change the code to this

for ($i=0;$i< sizeof($xml->entry); $i++)
...

Upvotes: 0

Related Questions