Rac*_*hel 0 php arrays associative-array
有什么方法在PHP中我可以获得PHP中的多维数组的n级密钥?
这是我的关联数组作为输出我想这将包含所有键的值的数组object_id,你可以有从结构本身也有许多嵌套的水平object_id,所以我怎么能得到的所有值的键object_id?
array
'cart' =>
array
12061 =>
array
'object_id' => string '12061' (length=5)
'discriminator' => string 'SimpleProductOffering' (length=21)
'spec' =>
array
100012061 =>
array
'object_id' => string '100012061' (length=9)
'discriminator' => string 'CompositeProductSpecification' (length=29)
'trait' =>
array
'MAIN_CPE' =>
array
'object_id' => string '1000000000015' (length=13)
'is_configurable' => string '0' (length=1)
'trait_value' =>
array
10001 =>
array
'object_id' => string '10001' (length=5)
'collateral' =>
array
empty
'collateral' =>
array
empty
'offer_type' => null
'price' =>
array
12862 =>
array
'object_id' => string '12862' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
empty
'collateral' =>
array
empty
12876 =>
array
'object_id' => string '12876' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
0 => string '12876' (length=5)
1 => string '12894' (length=5)
'collateral' =>
array
empty
'contained_offers' =>
array
empty
'family' =>
array
0 => string 'TV Subscription' (length=24)
'relationship' =>
array
'CHILDREN' =>
array
'object_id' => string '1206102000' (length=10)
'min' => string '0' (length=1)
'max' => string '1000000' (length=7)
'related_offer' =>
array
0 => string '10410' (length=5)
1 => string '10411' (length=5)
'REQUIREMENTS' =>
array
'object_id' => string '1206104000' (length=10)
'min' => string '1' (length=1)
'max' => string '1' (length=1)
'related_offer' =>
array
0 => string '11950' (length=5)
1 => string '11990' (length=5)
'EXCLUSIONS' =>
array
'object_id' => string '1206101000' (length=10)
'min' => string '1' (length=1)
'max' => string '1' (length=1)
'related_offer' =>
array
0 => string '12062' (length=5)
1 => string '12063' (length=5)
'ALTERNATIVES' =>
array
'object_id' => string '1206105000' (length=10)
'min' => string '1' (length=1)
'max' => string '1' (length=1)
'related_offer' =>
array
0 => string '12263' (length=5)
'BUNDLE_ITEMS' =>
array
'object_id' => string '1206106000' (length=10)
'min' => string '1' (length=1)
'max' => string '1' (length=1)
'related_offer' =>
array
0 => string '12062' (length=5)
'financial_terms' =>
array
'billing_period' =>
array
0 => string 'QUARTERLY' (length=9)
'payment_method' =>
array
0 => string 'DIRECT_DEBIT' (length=12)
'bill_presentation' =>
array
0 => string 'PAPER' (length=5)
'contract_constraints' =>
array
'min_contract_period' => int 24
'cancellation_period' => string 'ALWAYS' (length=6)
'notice_period' => int 3
'rollover_period' => int 2
'right_of_wd_period' => int 1
'collateral' =>
array
empty
10017 =>
array
'object_id' => string '10017' (length=5)
'spec' =>
array
100010017 =>
array
'object_id' => string '100010017' (length=9)
'discriminator' => string 'CompositeProductSpecification' (length=29)
'trait' =>
array
empty
'offer_type' => null
'price' =>
array
300306 =>
array
'object_id' => string '300306' (length=6)
'price_alteration' =>
array
empty
'collateral' =>
array
empty
12894 =>
array
'object_id' => string '12894' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
empty
'collateral' =>
array
empty
12862 =>
array
'object_id' => string '12862' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
empty
'collateral' =>
array
empty
12876 =>
array
'object_id' => string '12876' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
0 => string '12876' (length=5)
1 => string '12894' (length=5)
'collateral' =>
array
empty
'contained_offers' =>
array
0 => null
'family' =>
array
empty
'relationship' =>
array
'EXCLUSIONS' =>
array
'object_id' => string '1001701000' (length=10)
'min' => string '1' (length=1)
'max' => string '1' (length=1)
'related_offer' =>
array
0 => string '11893' (length=5)
14 => string '12305' (length=5)
15 => string '12306' (length=5)
'financial_terms' =>
array
'billing_period' =>
array
0 => string 'MONTHLY' (length=7)
1 => string 'QUARTERLY' (length=9)
'payment_method' =>
array
0 => string 'DIRECT_DEBIT' (length=12)
1 => string 'DIRECT_DEBIT' (length=12)
'bill_presentation' =>
array
0 => string 'EMAIL' (length=5)
1 => string 'PAPER' (length=5)
'contract_constraints' =>
array
'min_contract_period' => int 24
'cancellation_period' => string 'ALWAYS' (length=6)
'notice_period' => int 3
'rollover_period' => int 2
'right_of_wd_period' => int 1
'collateral' =>
array
empty
0 =>
array
11990 =>
array
'object_id' => string '11990' (length=5)
'discriminator' => string 'SimpleProductOffering' (length=21)
'spec' =>
array
100011990 =>
array
'object_id' => string '100011990' (length=9)
'discriminator' => string 'CompositeProductSpecification' (length=29)
'trait' =>
array
empty
'offer_type' => null
'price' =>
array
12862 =>
array
'object_id' => string '12862' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
empty
'collateral' =>
array
empty
12876 =>
array
'object_id' => string '12876' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
10017 =>
array
'object_id' => string '10017' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
empty
'collateral' =>
array
empty
12894 =>
array
'object_id' => string '12894' (length=5)
'discriminator' => string 'RecurringChargeProdOfferPriceCharge' (length=35)
'price_alteration' =>
array
empty
'collateral' =>
array
empty
'collateral' =>
array
empty
'contained_offers' =>
array
empty
'family' =>
array
0 => string 'CATV' (length=4)
'relationship' =>
array
empty
'financial_terms' =>
array
'billing_period' =>
array
0 => string 'QUARTERLY' (length=9)
'payment_method' =>
array
0 => string 'DIRECT_DEBIT' (length=12)
'bill_presentation' =>
array
0 => string 'PAPER' (length=5)
'contract_constraints' =>
array
'min_contract_period' => int 24
'collateral' =>
array
empty
Run Code Online (Sandbox Code Playgroud)
输出应该是一个包含keys =的所有值的数组object_id.好心提醒 ?
$res = array();
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST) as $k => $v) {
if ($k === 'object_id') {
$res[] = $v;
}
}
我想,Dereleased的解决方案会更快(因为它使用内部循环),我也可以处理object_id密钥的数组值.你的权衡;)
function find_all($needle, array $haystack, array &$result = null) {
// This is to initialize the result array and is only needed for
// the first call of this function
if(is_null($result)) {
$result = array();
}
foreach($haystack as $key => $value) {
// Check whether the key is the value we are looking for. If the value
// is not an array, add it to the result array.
if($key === $needle && !is_array($value)) {
$result[] = $value;
}
if(is_array($value)) {
// If the current value is an array, we perform the same
// operation with this 'subarray'.
find_all($needle, $value, $result);
}
}
// This is only needed in the first function call to retrieve the results
return $result;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,结果数组被赋予函数的每次调用作为引用(由表示&).这样,每次递归调用此函数都可以访问同一个数组,只需添加一个查找.
你可以做:
$values = find_all('object_id', $array);
Run Code Online (Sandbox Code Playgroud)
它给了我你的阵列:
Array
(
[0] => 12061
[1] => 100012061
[2] => 1000000000015
[3] => 10001
[4] => 12862
[5] => 12876
[6] => 1206102000
[7] => 1206104000
[8] => 1206101000
[9] => 1206105000
[10] => 1206106000
[11] => 10017
[12] => 100010017
[13] => 300306
[14] => 12894
[15] => 12862
[16] => 12876
[17] => 1001701000
[18] => 11990
[19] => 100011990
[20] => 12862
[21] => 12876
[22] => 10017
[23] => 12894
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |