在php中的现有数组中添加数组

在php中的现有数组中添加数组,php,arrays,save,add,recode,Php,Arrays,Save,Add,Recode,我有一个json。首先我必须解码,然后在json的特定键上添加循环 public function saveRecode() { $json ='{"productID":"1","productPrice":"5585.00","productDetails":{"productImage":"https:\/\/development.modeconfigurator.com\/eCommerce\/backdrop.jpg","TABLE TOP":"COPPER DISTRESS

我有一个json。首先我必须解码,然后在json的特定键上添加循环

public function saveRecode() {
    $json ='{"productID":"1","productPrice":"5585.00","productDetails":{"productImage":"https:\/\/development.modeconfigurator.com\/eCommerce\/backdrop.jpg","TABLE TOP":"COPPER DISTRESSED","TABLE FRAME":"RAL 5024 PASTEL BLUE"},"_":"1583172411557"}';

    $jsonDecode = json_decode($json, true);
    foreach ($jsonDecode["productDetails"] as $key => $value) {
        $options = [
            '0' => [
                'sort_order' => '1',
                'title' => $key,
                'price_type' => 'fixed',
                'price' => '',
                'type' => 'drop_down',
                'is_require' => '0',
                'values' => [
                    '0' =>[
                        'title' => $value,
                        'price' => '',
                        'price_type' => 'fixed',
                        'sku' => '',
                        'sort_order' => '0',
                        'is_delete' => '0',
                        ]
                    ]
                ]
            ];
    }
    foreach ($options as $arrayOption) {
        $this->_logger->debug("enter in opt ");
        $this->_logger->info(print_r($arrayOption,true));
        $option = $this->_options
            ->setProductId($_product->getId())
            ->setStoreId($_product->getStoreId())
            ->addData($arrayOption);
        $option->save();
        $_product->addOption($option);
    }
}
在数据库中,只有最后一次重新编码保存。但我想保存所有参数,请循环


每次通过循环都要替换
$options
,而不是向其中添加新元素。应该是:

$options = [];
foreach ($jsonDecode["productDetails"] as $key => $value) {
    $options[] = [
        'sort_order' => '1',
        'title' => $key,
        'price_type' => 'fixed',
        'price' => '',
        'type' => 'drop_down',
        'is_require' => '0',
        'values' => [
            '0' =>[
                'title' => $value,
                'price' => '',
                'price_type' => 'fixed',
                'sku' => '',
                'sort_order' => '0',
                'is_delete' => '0',
            ]
        ]
    ];
}

每次通过循环都要替换
$options
,而不是向其中添加新元素。应该是:

$options = [];
foreach ($jsonDecode["productDetails"] as $key => $value) {
    $options[] = [
        'sort_order' => '1',
        'title' => $key,
        'price_type' => 'fixed',
        'price' => '',
        'type' => 'drop_down',
        'is_require' => '0',
        'values' => [
            '0' =>[
                'title' => $value,
                'price' => '',
                'price_type' => 'fixed',
                'sku' => '',
                'sort_order' => '0',
                'is_delete' => '0',
            ]
        ]
    ];
}


好的,但在数据库中只保存一个重新编码您每次通过循环覆盖
$options
,而不是附加到它。那么请如何附加?您可以使用
$options[]=$item
或使用
数组推送($options,$item)
将新项目附加到数组中。请参见此处:确定,但在数据库中只保存一个重新编码您每次通过循环覆盖
$options
,而不是附加到它。那么请如何附加?您可以使用
$options[]=$item
或使用
数组推送($options,$item)
将新项目附加到数组中。请看这里:我已经实现了您的解决方案,现在只有一个键(“productImage”)保存了所有三个值。在屏幕截图中循环您只在
$jsonDecode['productDetails']
上循环,为什么您希望保存其他内容?每个带值的键意味着应该保存三次重新编码。在屏幕截图中查看我需要的正是这个,您在哪里设置了
$\u product
?我不知道您的
addData()
addOption()
方法是如何工作的,所以我不能确定您是否正确构造了
$options
元素。但是我不明白为什么我的代码让它们都成为同一个选项的一部分。我已经实现了你的解决方案,现在只有一个键(“productImage”)保存了所有三个值。在屏幕截图中循环您只在
$jsonDecode['productDetails']
上循环,为什么您希望保存其他内容?每个带值的键意味着应该保存三次重新编码。在屏幕截图中查看我需要的正是这个,您在哪里设置了
$\u product
?我不知道您的
addData()
addOption()
方法是如何工作的,所以我不能确定您是否正确构造了
$options
元素。但我不明白为什么我的代码让它们都成为同一选项的一部分。