Это не будет работать в PHP <7.2.0, и проблема в том, что строковые целочисленные ключи массива фактически преобразуются в целочисленные имена свойств, а не строки. Альтернативный способ получить объект из массива, который будет работать: </p>
$var = json_decode(json_encode(array('1' => 'Object one','2' => 'Object two')));
$num = "2";
var_dump( $var->$num );
См. Демоверсию , в PHP <7.2.0 приведение <code>(object) преобразуется в целочисленные свойства, но json_decode
создает свойства строки.