Как получить элемент объекта из массива, содержащего объект

Вот массив, который является ответом от платежного шлюза 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», и я хочу получить значение элемента [_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]);

я получил

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

Вопросы:

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

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

1

Решение

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

$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, но не был протестирован с другими объектами, которые имеют защищенные свойства.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]