When you convert object with numeric fields (see $obj
) to array you can't access it elements
$obj = new stdClass();
$obj->{"325890"} = "test";
$arr = (Array) $obj;
$key = array_keys($arr)[0];
var_dump($arr); // array (size=1) '325890' => string 'test' (length=4)
var_dump($key); // string '325890' (length=6)
var_dump($arr["325890"]); // null
var_dump($arr[325890]); // null
var_dump($arr[$key]); // null
$arr = unserialize(serialize($arr)); // this fixes that
var_dump($arr["325890"]); // string 'test' (length=4);
Also something strange happens when you assign data to same element:
$arr = (Array) $obj;
$arr[325890] = "test"; // or $arr["325890"] = "test";
var_dump($arr);
array (size=2)
'325890' => string 'test' (length=4)
325890 => string 'test' (length=4)
Is this a bug or documented behaviour? I am using PHP 7.1.2
I discovered thin bug when trying to access JSON elements with numeric keys.
$items = Array(
"100" => "item",
"200" => "item",
"300" => "item",
"400" => "item",
);
$json = json_encode($items);
$items = (Array) json_decode($json);
var_dump($items[100]); // null