如何从包含对象的数组中获取对象的元素
How to get an element of an object from an array containing the object
这是一个数组,它是来自 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
问题:
- 为什么这个数组中的键以星号开头
- 如何在不解析的情况下访问此类密钥
- 是否有另一种方法来获取关联数组中对象的元素。
注意:当我手动创建一个包含以星号开头的键的数组时,我可以毫无问题地访问这些键,但由于某些原因,我无法在将对象转换为数组时访问类似的键;
无需转换即可将数组中的对象捕获到变量中;
$captured_object = $response['deleteCardAccount'];
然后可以使用"arrow"符号简单地引用捕获对象的元素:
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 响应对象,但尚未针对具有受保护属性的其他对象进行测试。
这是一个数组,它是来自 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
问题:
- 为什么这个数组中的键以星号开头
- 如何在不解析的情况下访问此类密钥
- 是否有另一种方法来获取关联数组中对象的元素。
注意:当我手动创建一个包含以星号开头的键的数组时,我可以毫无问题地访问这些键,但由于某些原因,我无法在将对象转换为数组时访问类似的键;
无需转换即可将数组中的对象捕获到变量中;
$captured_object = $response['deleteCardAccount'];
然后可以使用"arrow"符号简单地引用捕获对象的元素:
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 响应对象,但尚未针对具有受保护属性的其他对象进行测试。