在php中的现有数组中添加数组
我有一个json。首先我必须解码,然后在json的特定键上添加循环在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
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
元素。但我不明白为什么我的代码让它们都成为同一选项的一部分。