[英]How to get a value from internal array of a multi-dimensional dynamic array without using loop constructs in PHP?
我有一個名為$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
)
)
)
)
)
從上面可以看到,實際數組的大小也可能非常大。 這取決於用戶輸入的數據。 現在,如果您在每個帶有鍵[products]
內部數組中密切觀察此數組,則會有更多數組。 但是,在[products]
鍵下顯示的每個內部數組中,鍵[manufacturer_id]
具有與之關聯的相同值37 。
我想將此值分配給新變量,就是這樣。 我不想要上述數組中的任何數據。 因此,我認為要從這個非常大的數組中獲取單個值,應用多個循環將不是一個好習慣。 我想以最少的價格獲得最佳的此值。 代碼行。 我應該如何實現呢?
有人可以在這方面幫助我嗎?
如果您決定循環。 我知道您說過您不想循環,但是3個循環的次數並不多。 所以無論如何,如果您決定改變主意,我都會為您完成。
//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'];
}
}
}
如果您真的不想循環。
//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'];
沒關系,我沒有重新創建您的數組。 因此可能有一個錯誤。 將調整循環,或在需要時進行靜態調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.