Weird behavior of matching array keys after json_decode()

Posted by arnorhs on Stack Overflow See other posts from Stack Overflow or by arnorhs
Published on 2010-04-04T15:12:46Z Indexed on 2010/04/04 15:23 UTC
Read the original article Hit count: 284

Filed under:
|

I've got some very weird behavior in my PHP code. I don't know if this is actually a good SO question, since it almost looks like a bug in PHP. I had this problem in a project of mine and isolated the problem:

// json object that will be converted into an array
$json = '{"5":"88"}';
$jsonvar = (array) json_decode($json); // notice: Casting to an array
// Displaying the array:
var_dump($jsonvar);
// Testing if the key is there
var_dump(isset($jsonvar["5"]));
var_dump(isset($jsonvar[5]));

That code outputs the following:

array(1) {
  ["5"]=>
  string(2) "88"
}
bool(false)
bool(false)

The big problem: Both of those tests should produce bool(true) - if you create the same array using regular php arrays, this is what you'll see:

// Let's create a similar PHP array in a regular manner:
$phparr = array("5" => "88");
// Displaying the array:
var_dump($phparr);
// Testing if the key is there
var_dump(isset($phparr["5"]));
var_dump(isset($phparr[5]));

The output of that:

array(1) {
  [5]=>
  string(2) "88"
}
bool(true)
bool(true)

So this doesn't really make sense. I've tested this on two different installations of PHP/apache.

You can copy-paste the code to a php file yourself to test it.

It must have something to do with the casting from an object to an array.

© Stack Overflow or respective owner

Related posts about php

Related posts about arrays