Как получить доступ к значению $array[@key]

Я работаю с expedia API, и он работает хорошо, но я не знаю, как получить доступ к этому особому типу ключа массива. Ответ дан ниже

$response = 
stdClass Object
(
    [@size] => 1
    [@activePropertyCount] => 144
    [city] => 1
    [@hotelId] => 12345
    [HotelSummary] => stdClass Object
        (
            [@order] => 0
            [@ubsScore] => 1074874
            [hotelId] => 151689
            [RoomRateDetailsList] => stdClass Object
                (
                    [RoomRateDetails] => stdClass Object
                        (
                            [roomTypeCode] => 195577
                            [rateCode] => 202369379
                            [maxRoomOccupancy] => 3
                            [quotedRoomOccupancy] => 2
                            [minGuestAge] => 0
                            [roomDescription] => Deluxe Room
                            [propertyAvailable] => 1
                            [propertyRestricted] => 
                            [expediaPropertyId] => 526332
                        )
                )
        )
)

Я хочу получить доступ к значению @hotelId под ключом «город», но не могу

Я пробовал с обоими типами, но оба раза потерпел неудачу, так как

$response->hotelId
and 
$response->@hotelId

Пожалуйста, помогите мне .. спасибо заранее


person vikujangid    schedule 26.03.2015    source источник
comment
Извините, ответ не массив, а объект типа stdClass. Поэтому я не могу получить к нему доступ с помощью $response['@hotelId']   -  person vikujangid    schedule 26.03.2015
comment
@banditpanda спасибо, все работает, но результат не такой точный, как я хочу. Это дает мне «строку (5) 12345», но я хочу только 12345   -  person vikujangid    schedule 26.03.2015
comment
это просто var_dump спецификация функции, используйте echo или print   -  person Tobiasz    schedule 26.03.2015
comment
Хорошо, спасибо @banditpanda. Я понял   -  person vikujangid    schedule 26.03.2015


Ответы (1)


Это должно сработать для вас:

(Это связано с тем, что вы не можете получить доступ к свойству, у которого нет допустимого имени переменной, поэтому вам нужно использовать фигурный синтаксис)

echo $response->{"@hotelId"};

Подробнее об этом можно прочитать в руководстве: http://php.net/manual/en/language.variables.variable.php

И цитата оттуда:

Также можно использовать фигурные скобки, чтобы четко разграничить имя свойства. Они наиболее полезны при доступе к значениям в свойстве, содержащем массив, когда имя свойства состоит из нескольких частей, или когда имя свойства содержит символы, которые в противном случае недействительны (например, из json_decode() или SimpleXML).

person Rizier123    schedule 26.03.2015
comment
@Rizier123 Rizier123 Я получил значение из массива с помощью $response['abc']['@hotelId']; но он отображается как String (7) (asasasa) Как показывает var_dump. как я могу получить его как asasasa Только также, если я попытаюсь напечатать Like $response['abc']-›{'@hotelId'}; затем он показывает мне значение NULL - person ankit verma; 23.12.2015
comment
@ankitverma Тогда вы, вероятно, сохранили вывод из var_dump() в своем элементе массива. Пожалуйста, покажите свой вывод из: print_r($response["abc"]["@hotelld"]); (Лучше всего просто опубликовать ссылку на pastebin здесь). Если бы вы действительно сохранили вывод: var_dump() в элементе, я бы сначала поискал источник, где вы это сделали, и изменил его там, иначе вам пришлось бы использовать регулярное выражение, например. preg_match("/String\(\d+\)\(\"(.*?)\"\)/", $input). Также обратите внимание, что этот вопрос на самом деле касается свойств объекта, а не элементов массива. - person Rizier123; 23.12.2015