【问题标题】:Create and fill an associative array of multiples dimensions创建并填充多个维度的关联数组
【发布时间】:2019-10-28 01:50:52
【问题描述】:

我目前正在尝试创建一个具有两个维度的关联数组,我认为针对此问题的解决方案可以解决具有更多维度的数组的问题。

我使用如下所示的 API 恢复数据:

   {
        "item_id": "89",
        "name": "Confiture de Myrtilles",
        "product_id": "737",
        "meta_key": "vmm_warehouse_sg_10783",
        "meta_value": "0"
    },
    {
        "item_id": "89",
        "name": "Confiture de Myrtilles",
        "product_id": "737",
        "meta_key": "vmm_warehouse_sg_10782",
        "meta_value": "0"
    },

    {
        "item_id": "91",
        "name": "Poires Guyot (bio)",
        "product_id": "690",
        "meta_key": "_backorders",
        "meta_value": "no"
    },
    {
        "item_id": "91",
        "name": "Poires Guyot (bio)",
        "product_id": "690",
        "meta_key": "_sold_individually",
        "meta_value": "no"
    },

我只想创建一个这样的数组:

            array[item_id->[meta_key->meta_value]]

所以我必须恢复将具有第二个数组角色的 item_id,并在将元键和元值相关联的元键和元值放入此数组后。

例如,我将有一个这样的数组:

产品[89]["vmm_warehouse_sg_10783"->"0" "vmm_warehouse_sg_10782"->"0"]

还有一个这样的:

产品[91][........]

最后,我会有一个这样的最终数组:

Products [ [89]->{"vmm_warehouse_sg_10783"->"0","vmm_warehouse_sg_10782"->"0"}
           [91]->{.....}]

我已经尝试了一些东西,但我只是一个初学者,我没有找到解决我的问题的方法。

$Products = $this->wpdb->get_results( $SQL_Deliveries );
//this line allow $Products to recover all data from the API


foreach ( $Products as $Product ) {
    $Meta_products[] = Product->item_id;
    foreach($Product as $Product_meta){
    $Meta_products[$item_id]->{Product_meta->meta_key,Product_meta
        ->meta_value);
    }

我确定我的代码中也有错误,但我真的不知道如何解决这个问题。感谢您的参与!

【问题讨论】:

    标签: php arrays dimensions associative


    【解决方案1】:

    看起来你想要一个多维对象数组。

    声明嵌套对象会涉及一些小问题。花括号也是必要的。

    代码:(Demo)

    $products = [
        (object)["item_id"    => "89",
         "name"       => "Confiture de Myrtilles",
         "product_id" => "737",
         "meta_key"   => "vmm_warehouse_sg_10783",
         "meta_value" => "0"
        ],
        (object)["item_id"    => "89",
         "name"       => "Confiture de Myrtilles",
         "product_id" => "737",
         "meta_key"   => "vmm_warehouse_sg_10782",
         "meta_value" => "0"
        ]
    ];
        $result = (object)[];
        foreach($products as $product) {
            if (!isset($result->{$product->item_id})) {
                $result->{$product->item_id} = (object)[];
            }
            $result->{$product->item_id}->{$product->meta_key} = $product->meta_value; 
        }
    
    var_export($result);
    

    输出:

    (object) array(
       '89' => 
      (object) array(
         'vmm_warehouse_sg_10783' => '0',
         'vmm_warehouse_sg_10782' => '0',
      ),
    )
    

    或者,要生成嵌套对象结构,您可以构建一个数组数组,然后在结果上使用json_encode(),然后使用json_decode()


    如果你想要一个数组作为输出,这是最简单的: 代码:(Demo)

    $products = [
        (object)["item_id"    => "89",
         "name"       => "Confiture de Myrtilles",
         "product_id" => "737",
         "meta_key"   => "vmm_warehouse_sg_10783",
         "meta_value" => "0"
        ],
        (object)["item_id"    => "89",
         "name"       => "Confiture de Myrtilles",
         "product_id" => "737",
         "meta_key"   => "vmm_warehouse_sg_10782",
         "meta_value" => "0"
        ],
        (object)["item_id"    => "91",
         "name"       => "Poires Guyot (bio)",
         "product_id" => "690",
         "meta_key"   => "_backorders",
         "meta_value" => "no"
        ],
        (object)["item_id"    => "91",
         "name"       => "Poires Guyot (bio)",
         "product_id" => "690",
         "meta_key"   => "_sold_individually",
         "meta_value" => "no"
        ]
    ];
    
    $result = [];
    foreach($products as $product) {
        $result[$product->item_id][$product->meta_key] = $product->meta_value; 
    }
    
    var_export($result);
    

    输出:

    array (
      89 => 
      array (
        'vmm_warehouse_sg_10783' => '0',
        'vmm_warehouse_sg_10782' => '0',
      ),
      91 => 
      array (
        '_backorders' => 'no',
        '_sold_individually' => 'no',
      ),
    )
    

    【讨论】:

      【解决方案2】:

      我不完全明白你想要实现什么,但我想你想要关联数组,其中 id 作为键,meta_key 和 meta_value 的数组作为它的值?

      如果是,那么:

      foreach ( $Products as $Product ) {
          $Meta_products[$Product->item_id][$Product->meta_key] = $Product->meta_value;
      }
      

      【讨论】:

      • 是的,但如果它们具有相同的 item_id,我想将所有 meta_key 和 meta_value 放在一起。在我的 API 答案示例中,您有两个数组。两者都有相同的 item_id,所以我只想创建一个名为“index_id”的数组,在里面你将拥有所有 meta_key 和 meta_value。
      • @JulienTxerriakGuillou 我已经编辑了我的答案,现在您可以通过例如访问您的数据。 $Meta_products[89]["vmm_warehouse_sg_10783"]
      猜你喜欢
      • 2022-01-13
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      相关资源
      最近更新 更多