【问题标题】:How to get a value from internal array of a multi-dimensional dynamic array without using loop constructs in PHP?如何在不使用 PHP 循环结构的情况下从多维动态数组的内部数组中获取值?
【发布时间】:2014-05-19 05:33:21
【问题描述】:

我有一个名为$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

我想将此值分配给一个新变量,就是这样。我不想要上述数组中的任何数据。所以我认为要从这个非常大的数组中获取单个值,应用多个循环并不是一个好习惯。我想以最小的数量获得这个值。的代码行。我应该如何实现这一目标?

有人可以在这方面帮助我吗?

【问题讨论】:

    标签: php arrays multidimensional-array associative-array key-value


    【解决方案1】:

    如果你决定循环。我知道你说你不想循环,但是 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'];
    

    记住我没有重新创建你的数组。所以可能会出错。如果需要,将调整循环或静态调用。

    【讨论】:

      猜你喜欢
      • 2019-12-01
      • 2011-12-21
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多