2016-06-30 3 views
1

Вот массив, который является ответом от Stripe платежного шлюза:Как получить элемент объекта из массива, содержащего объект

$response = Array ([deleteCardAccount] => Stripe\Card Object ([_opts:protected] => Stripe\Util\RequestOptions Object ([headers] => Array () [apiKey] => sk_test_erwppHN9ibdfgdfg0CesaOwnDy) [_values:protected] => Array ([id] => card_18SwerIsEZ1YjoOMVAFRLA [currency] => usd [deleted] => 1) [_unsavedValues:protected] => Stripe\Util\Set Object ([_elts:Stripe\Util\Set:private] => Array ()) ... 

выше массив содержит объект «Stripe \ Card Object» и I хотите получить значение элемента [_values: protected], который является массивом.

Когда я бросил объект в массив

$nasty_array = (array)$response['deleteCardAccount']; 
print_r($nasty_array); 

Я получаю этот массив, который содержит ключи, которые начинаются с звездочки:

Array ([*_opts] => Stripe\Util\RequestOptions Object ([headers] => Array () [apiKey] => sk_test_wejYbwerCerwesaOefg) [*_values] => Array ([id] => card_18SwerIsEZ1YjoOMVAFRLA [currency] => usd [deleted] => 1) [*_unsavedValues] => Stripe\Util\Set Object ([_elts:Stripe\Util\Set:private] => Array ()) ... 

Однако, когда я пытаюсь

print_r($nasty_array[*_opts]); 
print_r($nasty_array[*_values]); 

I get

error: Undefined index *_values 
error: Undefined index *_opts 

Вопросов:

  1. Почему ключи в этом массиве начинаются с звездочкой
  2. Как получить доступ к таким ключам без разбора
  3. Есть еще один способ, чтобы получить элемент объекта, который находится внутри ассоциативный массив.

Примечание: когда я вручную создаю массив с ключами, начинающимися со звездочки, то я могу получить доступ к таким ключам без проблем, но по какой-то причине я не могу получить доступ к подобным ключам при бросании opject в массив;

+1

Разве вы не должны ставить кавычки вокруг ключей массива при доступе к нему? 'print_r ($ nasty_array ['* _ opts']);' – Osuwariboy

+0

Без кавычек скрипт не работает и создает пустую страницу. – Jimski

+2

Причина, по которой вы не можете получить доступ к этим свойствам, заключается не в том, что объект находится внутри массива. Причина, по которой вы не можете получить к ним доступ, заключается в том, что они [защищены] (http://php.net/manual/en/language.oop5.visibility.php), что также является причиной того, что они являются звездочками/недоступными при нажатии объект массива. –

ответ

0

Объект из массива может быть захвачен в переменную без литья;

$captured_object = $response['deleteCardAccount']; 

И тогда элементы захваченного объекта можно просто ссылаться с помощью «стрелка» обозначения:

print_r($captured_object->id);  
print_r($captured_object->currency); 
print_r($captured_object->deleted); 

или даже простой объект можно ссылаться непосредственно путем смешивания обозначения массива и стрелки обозначения:

print $response['deleteCardAccount']->id; 
print $response['deleteCardAccount']->currency 
print $response['deleteCardAccount']->deleted; 

Этот подход работает с объектами ответа Stripe, но не был протестирован с другими объектами, которые имеют защищенные свойства.

 Смежные вопросы

  • Нет связанных вопросов^_^