Просто хотел добавить к красноречивому объяснению Джона причину, почему это не удается. Это все потому, что при создании массива php преобразует ключи в целые числа & mdash; если он может & mdash; что вызывает проблемы поиска на массивах, которые были переданы объектам, просто потому, что цифровой ключ сохранен. Это проблематично, потому что все параметры доступа к ресурсам ожидают или конвертируют в строки. Вы можете подтвердить это, выполнив следующие действия:
$arr = array('123' => 'abc');
$obj = (object) $arr;
$obj->{'123'} = 'abc';
print_r( $obj );
, которые будут выводиться:
stdClass Object (
[123] => 'abc',
[123] => 'abc'
)
Таким образом, у объекта есть две клавиши свойств, одна цифра (к которой невозможно получить доступ ) и одна строка. Вот почему Jon #Fact 4
работает, потому что, устанавливая свойство с помощью фигурных скобок, вы всегда определяете строковый ключ, а не числовой.
Принимая решение Джона, но поворачивая его на голову , вы можете сгенерировать объект из вашего массива, который всегда имеет строковые ключи, выполнив следующее:
$obj = json_decode(json_encode($arr));
Теперь вы можете использовать любое из следующих действий, потому что доступ таким образом всегда преобразует значение внутри фигурной скобки до строки:
$obj->{123};
$obj->{'123'};
Хороший старый нелогичный PHP ...