[英]How to get a value from internal array of a multi-dimensional dynamic array without using loop constructs in PHP?
I've a following dynamic multi-dimensional array titled $rebate_by_product_data
: 我有一个名为
$rebate_by_product_data
动态多维数组:
Array
(
[0] => Array
(
[id] => 93
[start_date] => 2014-06-01
[end_date] => 2014-06-30
[count] => 10000
[rebate_type_id] => 2
[created_at] => 1400148462
[updated_at] => 1400148462
[applicable_states] => Array
(
[0] => Array
(
[id] => 446
[state_id] => 2
[rebate_id] => 93
[created_at] => 1400148462
[updated_at] => 1400148462
[state_name] => Alaska
)
[1] => Array
(
[id] => 447
[state_id] => 14
[rebate_id] => 93
[created_at] => 1400148462
[updated_at] => 1400148462
[state_name] => Indiana
)
[2] => Array
(
[id] => 448
[state_id] => 23
[rebate_id] => 93
[created_at] => 1400148462
[updated_at] => 1400148462
[state_name] => Minnesota
)
[3] => Array
(
[id] => 449
[state_id] => 35
[rebate_id] => 93
[created_at] => 1400148462
[updated_at] => 1400148462
[state_name] => Ohio
)
[4] => Array
(
[id] => 450
[state_id] => 42
[rebate_id] => 93
[created_at] => 1400148462
[updated_at] => 1400148462
[state_name] => Tennessee
)
)
[rebate_product] => Array
(
[0] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 13
[product_name] => Budwiser
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
[1] => Array
(
[product_id] => 16
[product_name] => Fosters
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
)
[saleable_unit] => Array
(
[id] => 169
[quantity] => 20
[pack_of] => 10
[volume] => 30
[volume_unit_id] => 9
[amount] => 40
[created_at] => 1400148462
[updated_at] => 1400148462
)
)
[1] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 14
[product_name] => Kingfisher Strong
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 2
)
[1] => Array
(
[product_id] => 15
[product_name] => Tuborg
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 2
)
)
[saleable_unit] => Array
(
[id] => 170
[quantity] => 60
[pack_of] => 50
[volume] => 70
[volume_unit_id] => 20
[amount] => 80
[created_at] => 1400148462
[updated_at] => 1400148462
)
)
)
)
[1] => Array
(
[id] => 99
[start_date] => 2014-05-29
[end_date] => 2014-05-30
[count] => 12
[rebate_type_id] => 2
[created_at] => 1400163679
[updated_at] => 1400248387
[applicable_states] => Array
(
[0] => Array
(
[id] => 500
[state_id] => 1
[rebate_id] => 99
[created_at] => 1400248387
[updated_at] => 1400248387
[state_name] => Alabama
)
[1] => Array
(
[id] => 501
[state_id] => 12
[rebate_id] => 99
[created_at] => 1400248387
[updated_at] => 1400248387
[state_name] => Idaho
)
[2] => Array
(
[id] => 502
[state_id] => 14
[rebate_id] => 99
[created_at] => 1400248387
[updated_at] => 1400248387
[state_name] => Indiana
)
[3] => Array
(
[id] => 503
[state_id] => 27
[rebate_id] => 99
[created_at] => 1400248387
[updated_at] => 1400248387
[state_name] => Nebraska
)
)
[rebate_product] => Array
(
[0] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 12
[product_name] => Signature Scotch Whiskey
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
[1] => Array
(
[product_id] => 13
[product_name] => Budwiser
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
[2] => Array
(
[product_id] => 15
[product_name] => Tuborg
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
)
[saleable_unit] => Array
(
[id] => 195
[quantity] => 10
[pack_of] => 12
[volume] => 100
[volume_unit_id] => 7
[amount] => 200
[created_at] => 1400248388
[updated_at] => 1400248388
)
)
[1] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 16
[product_name] => Fosters
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 2
)
[1] => Array
(
[product_id] => 14
[product_name] => Kingfisher Strong
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 2
)
)
[saleable_unit] => Array
(
[id] => 196
[quantity] => 2
[pack_of] => 12
[volume] => 200
[volume_unit_id] => 9
[amount] => 77777
[created_at] => 1400248388
[updated_at] => 1400248388
)
)
)
)
[2] => Array
(
[id] => 100
[start_date] => 2014-06-26
[end_date] => 2014-06-30
[count] => 10000
[rebate_type_id] => 2
[created_at] => 1400240035
[updated_at] => 1400243964
[applicable_states] => Array
(
[0] => Array
(
[id] => 495
[state_id] => 2
[rebate_id] => 100
[created_at] => 1400247125
[updated_at] => 1400247125
[state_name] => Alaska
)
[1] => Array
(
[id] => 496
[state_id] => 14
[rebate_id] => 100
[created_at] => 1400247125
[updated_at] => 1400247125
[state_name] => Indiana
)
[2] => Array
(
[id] => 497
[state_id] => 23
[rebate_id] => 100
[created_at] => 1400247125
[updated_at] => 1400247125
[state_name] => Minnesota
)
[3] => Array
(
[id] => 498
[state_id] => 35
[rebate_id] => 100
[created_at] => 1400247125
[updated_at] => 1400247125
[state_name] => Ohio
)
[4] => Array
(
[id] => 499
[state_id] => 42
[rebate_id] => 100
[created_at] => 1400247125
[updated_at] => 1400247125
[state_name] => Tennessee
)
)
[rebate_product] => Array
(
[0] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 13
[product_name] => Budwiser
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
[1] => Array
(
[product_id] => 16
[product_name] => Fosters
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
)
[saleable_unit] => Array
(
[id] => 193
[quantity] => 20
[pack_of] => 10
[volume] => 30
[volume_unit_id] => 9
[amount] => 40
[created_at] => 1400247125
[updated_at] => 1400247125
)
)
[1] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 14
[product_name] => Kingfisher Strong
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 2
)
[1] => Array
(
[product_id] => 15
[product_name] => Tuborg
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 2
)
)
[saleable_unit] => Array
(
[id] => 194
[quantity] => 6000
[pack_of] => 500
[volume] => 700
[volume_unit_id] => 9
[amount] => 805
[created_at] => 1400247125
[updated_at] => 1400247125
)
)
)
)
[3] => Array
(
[id] => 102
[start_date] => 2014-05-20
[end_date] => 2014-05-31
[count] => 545
[rebate_type_id] => 2
[created_at] => 1400264987
[updated_at] => 1400264987
[applicable_states] => Array
(
[0] => Array
(
[id] => 505
[state_id] => 2
[rebate_id] => 102
[created_at] => 1400264987
[updated_at] => 1400264987
[state_name] => Alaska
)
[1] => Array
(
[id] => 506
[state_id] => 3
[rebate_id] => 102
[created_at] => 1400264987
[updated_at] => 1400264987
[state_name] => Arizona
)
)
[rebate_product] => Array
(
[0] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 12
[product_name] => Signature Scotch Whiskey
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
)
[saleable_unit] => Array
(
[id] => 200
[quantity] => 7
[pack_of] => 10
[volume] => 88
[volume_unit_id] => 7
[amount] => 56
[created_at] => 1400264987
[updated_at] => 1400264987
)
)
)
)
[4] => Array
(
[id] => 103
[start_date] => 2014-05-07
[end_date] => 2014-05-29
[count] => 12456
[rebate_type_id] => 2
[created_at] => 1400266051
[updated_at] => 1400266051
[applicable_states] => Array
(
[0] => Array
(
[id] => 507
[state_id] => 3
[rebate_id] => 103
[created_at] => 1400266051
[updated_at] => 1400266051
[state_name] => Arizona
)
[1] => Array
(
[id] => 508
[state_id] => 5
[rebate_id] => 103
[created_at] => 1400266051
[updated_at] => 1400266051
[state_name] => California
)
)
[rebate_product] => Array
(
[0] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 12
[product_name] => Signature Scotch Whiskey
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
[1] => Array
(
[product_id] => 16
[product_name] => Fosters
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 1
)
)
[saleable_unit] => Array
(
[id] => 201
[quantity] => 1
[pack_of] =>
[volume] => 1
[volume_unit_id] => 10
[amount] => 4
[created_at] => 1400266051
[updated_at] => 1400266051
)
)
[1] => Array
(
[products] => Array
(
[0] => Array
(
[product_id] => 13
[product_name] => Budwiser
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 2
)
[1] => Array
(
[product_id] => 15
[product_name] => Tuborg
[manufacturer_id] => 37
[company_name] => Amazon
[rebate_variant_id] => 2
)
)
[saleable_unit] => Array
(
[id] => 202
[quantity] => 1
[pack_of] =>
[volume] => 1
[volume_unit_id] => 10
[amount] => 5
[created_at] => 1400266051
[updated_at] => 1400266051
)
)
)
)
)
You can see from above that the actual array can be very large in size of very small too. 从上面可以看到,实际数组的大小也可能非常大。 It depends on the data entered by user.
这取决于用户输入的数据。 Now if you observe this array closely in each inner array with key
[products]
there are more arrays. 现在,如果您在每个带有键
[products]
内部数组中密切观察此数组,则会有更多数组。 But in each of these inner arrays present under [products]
key the key [manufacturer_id]
is having the same value associated with it 37 . 但是,在
[products]
键下显示的每个内部数组中,键[manufacturer_id]
具有与之关联的相同值37 。
I want to assign this value to a new variable, that's it. 我想将此值分配给新变量,就是这样。 I don't want any of the data from the above array.
我不想要上述数组中的任何数据。 So I think to get the single value from this very big array it will not a good practice to apply many loops.
因此,我认为要从这个非常大的数组中获取单个值,应用多个循环将不是一个好习惯。 I want to get this value optimally in minimal no.
我想以最少的价格获得最佳的此值。 of code lines.
代码行。 How should I achieve this?
我应该如何实现呢?
Can someone please help me in this regard please? 有人可以在这方面帮助我吗?
If you decide to loop. 如果您决定循环。 I know you said you didn't want to loop, but 3 loops isn't so many.
我知道您说过您不想循环,但是3个循环的次数并不多。 So I did it for you anyway, case you decide to change your mind.
所以无论如何,如果您决定改变主意,我都会为您完成。
//Loop through your array
foreach($rebate_by_product_data AS $key => $product_data){
//Check if the rebate_product instance has been set
if(!isset($product_data['rebate_product'])){
//If it hasn't skip this loop continue onto the next
continue;
}
//Loop through the rebate_products
foreach($product_data['rebate_product'] AS $products){
//rebate_products should all have manufacturer_id's ?
foreach($products AS $product){
//Get your manufacturer ID.
$manufacturer_id = $product['manufacturer_id'];
}
}
}
If you really don't want to loop. 如果您真的不想循环。
//Second way is to just call the indexes off one by one, statically, if you only need one instance of the manufacturer_id
$manufacturer_id = $rebate_by_product_data[0]['rebate_product'][0]['products'][0]['manufacturer_id'];
Bare in mind I didn't re-create your array. 没关系,我没有重新创建您的数组。 So there might be a mistake.
因此可能有一个错误。 Will adjust the loop, or the static call if needed.
将调整循环,或在需要时进行静态调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.