Массив php после десериализации не может получить значение по ключу

Массив не может получить значение по ключу из десериализации. Он показывает ошибку Неопределенное смещение, но массив имеет индексный вызов «1134». Как я могу получить значение индекса 1134?

$original = unserialize('O:8:"stdClass":1:{s:4:"1134";i:1;}');

$result = (array)$original;
print_r ($result); //Array ( [1134] => 1 ) 

print_r($result["1134"]); //Undefined offset: 1134
print_r($result['1134']); //Undefined offset: 1134
print_r($result[1134]); //Undefined offset: 1134

Извините - я не могу воспроизвести эту проблему - все они просто печатают 1. (в версии 7.2)

Nigel Ren 26.10.2018 09:10

проверьте версию 5 @NigelRen: -3v4l.org/h0eWQ

Anant Kumar Singh 26.10.2018 09:11

@AlivetoDie спасибо, всегда проблема с вариациями в разных версиях.

Nigel Ren 26.10.2018 09:13
3
3
174
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вам нужно перебрать несериализованные данные, а затем сохранить их в массиве:

<?php
$original = unserialize('O:8:"stdClass":1:{s:4:"1134";i:1;}');
$arr = [];
foreach($original as $key => $values) {
    $arr[$key] = $values;
}
echo $arr[1134] // outputs 1
?>

Выход: -https://3v4l.org/B94OS#v5638

$original = unserialize('O:8:"stdClass":1:{s:4:"1134";i:1;}');

$result = (array)$original;
print_r($result[1134]); //print 1 

Попробуйте это, вы можете использовать его как объект или можете использовать get_object_vars (), чтобы использовать его как массив, или можете использовать приведение типов.

<?php
$original = unserialize('O:8:"stdClass":1:{s:4:"1134";i:1;}');
var_dump($original->{1134}); //Object
var_dump(get_object_vars($original)['1134']); //array
?>

@ D.Dimitrov обновил мой ответ, чтобы он стал лучше, что может прояснить для вас ситуацию.

Prafulla Kumar Sahu 26.10.2018 09:16

Ваш код работает нормально в моей версии PHP 7.2. Похоже, вы используете PHP 5.4 или 5.6. В любом случае я обновил код для вашей версии php и надеюсь, что он будет работать.

 $original = unserialize('O:8:"stdClass":1:{s:4:"1134";i:1;}');
 $result = json_decode(json_encode($original), True);
 print_r ($result);
 print_r($result["1134"]); 
 print_r($result['1134']); 
 print_r($result[1134]);

Другие вопросы по теме