Есть json:
{
"orderid": "1586202852",
"products": [
{
"name": "ПРАЗДНИЧНЫЙ НАБОР",
"quantity": "1",
"amount": "2420",
"price": "2420",
"options": [
{
"option": "Храбрая открытка к твоему заказу",
"variant": "Без открытки"
},
{
"option": "ВЫБРАТЬ 1-ЫЙ ДЕСЕРТ В НАБОРЕ",
"variant": "ХАЛВ ХОГАН"
},
{
"option": "ВЫБРАТЬ 2-ОЙ ДЕСЕРТ В НАБОРЕ",
"variant": "БРАУНИ С БЕКОНОМ, ВИШНЕЙ И МИНДАЛЕМ"
},
{
"option": "ВЫБРАТЬ 3-ИЙ ДЕСЕРТ В НАБОРЕ",
"variant": "БЛОНДИ С ОБЛЕПИХОЙ И БАЗИЛИКОМ"
}
]
},
{
"name": "БРАУНИ С КЛЮКВОЙ И ПЕРЕЧНОЙ МЯТОЙ",
"quantity": "1",
"amount": "750",
"price": "750",
"options": [
{
"option": "Веганский",
"variant": "ДА"
},
{
"option": "Храбрая открытка к твоему заказу",
"variant": "Без открытки"
}
]
}
],
"promocode": "ЗВОНОК",
"discountvalue": "5%",
"discount": "158.500",
"subtotal": "3170",
"amount": "3411.5"
}
Из этого json-а я формирую массив через array_map
.
код:
$json=$value['products'];
if (isset($json[0]['options'][3]['option'])) {
$prod_mass=array_map( function($v) use ($domen_crm, $apikey_crm) { return ['quantity'=>$v['quantity'], 'offer'=>['id'=>namesku_to_id($v['name'],$domen_crm,$apikey_crm)], 'properties'=>[['name'=>$v['options'][0]['option'], 'value'=>$v['options'][0]['variant']],['name'=>$v['options'][1]['option'], 'value'=>$v['options'][1]['variant']],['name'=>$v['options'][2]['option'], 'value'=>$v['options'][2]['variant']],['name'=>$v['options'][3]['option'], 'value'=>$v['options'][3]['variant']]]]; }, $json);
} elseif (isset($json[0]['options'][2]['option'])) {
$prod_mass=array_map( function($v) use ($domen_crm, $apikey_crm) { return ['quantity'=>$v['quantity'], 'offer'=>['id'=>namesku_to_id($v['name'],$domen_crm,$apikey_crm)], 'properties'=>[['name'=>$v['options'][0]['option'], 'value'=>$v['options'][0]['variant']],['name'=>$v['options'][1]['option'], 'value'=>$v['options'][1]['variant']],['name'=>$v['options'][2]['option'], 'value'=>$v['options'][2]['variant']]]]; }, $json);
} elseif (isset($json[0]['options'][1]['option'])) {
$prod_mass=array_map( function($v) use ($domen_crm, $apikey_crm) { return ['quantity'=>$v['quantity'], 'offer'=>['id'=>namesku_to_id($v['name'],$domen_crm,$apikey_crm)], 'properties'=>[['name'=>$v['options'][0]['option'], 'value'=>$v['options'][0]['variant']],['name'=>$v['options'][1]['option'], 'value'=>$v['options'][1]['variant']]]]; }, $json);
} elseif (isset($json[0]['options'][0]['option'])) {
$prod_mass=array_map( function($v) use ($domen_crm, $apikey_crm) { return ['quantity'=>$v['quantity'], 'offer'=>['id'=>namesku_to_id($v['name'],$domen_crm,$apikey_crm)], 'properties'=>[['name'=>$v['options'][0]['option'], 'value'=>$v['options'][0]['variant']]]]; }, $json);
} else {
$prod_mass=array_map( function($v) use ($domen_crm, $apikey_crm) { return ['quantity'=>$v['quantity'], 'offer'=>['id'=>namesku_to_id($v['name'],$domen_crm,$apikey_crm)]]; }, $json);
}
Подскажите, как обработать опции (options), их может быть 0-4 в каждом products.
я пишу 'name'=>$v['options'][0]['option'], 'name'=>$v['options'][1]['option']
, но мне нужно избавиться от прявязки к индексу.
И второй вопрос, опций может не быть, как в array_map
просто ничего не выводить если (options) нет
Если я правильно понял, то тут вообще все проще некуда (если я не так понял, то увы, объясните подробнее, что вы хотите):
$json = '{
"orderid": "1586202852",
"products": [
{
"name": "ПРАЗДНИЧНЫЙ НАБОР",
"quantity": "1",
"amount": "2420",
"price": "2420",
"options": [
{
"option": "Храбрая открытка к твоему заказу",
"variant": "Без открытки"
},
{
"option": "ВЫБРАТЬ 1-ЫЙ ДЕСЕРТ В НАБОРЕ",
"variant": "ХАЛВ ХОГАН"
},
{
"option": "ВЫБРАТЬ 2-ОЙ ДЕСЕРТ В НАБОРЕ",
"variant": "БРАУНИ С БЕКОНОМ, ВИШНЕЙ И МИНДАЛЕМ"
},
{
"option": "ВЫБРАТЬ 3-ИЙ ДЕСЕРТ В НАБОРЕ",
"variant": "БЛОНДИ С ОБЛЕПИХОЙ И БАЗИЛИКОМ"
}
]
},
{
"name": "БРАУНИ С КЛЮКВОЙ И ПЕРЕЧНОЙ МЯТОЙ",
"quantity": "1",
"amount": "750",
"price": "750",
"options": [
{
"option": "Веганский",
"variant": "ДА"
},
{
"option": "Храбрая открытка к твоему заказу",
"variant": "Без открытки"
}
]
}
],
"promocode": "ЗВОНОК",
"discountvalue": "5%",
"discount": "158.500",
"subtotal": "3170",
"amount": "3411.5"
}';
Собираем через foreach
:
$json = json_decode($json, true);
$json = $json['products'];
$products = [];
foreach ($json as $product) {
$name = $product['name'] ?? '';
$quantity = $product['quantity'] ?? '';
$prod = [
'quantity' => $quantity,
'offer' => [
'id' => namesku_to_id($name, $domen_crm, $apikey_crm)
]
];
if (($options = $product['options'] ?? [])) {
foreach ($options as &$option) {
$option = [
'name' => $option['option'],
'value' => $option['variant']
];
}
$prod['properties'] = $options;
}
$products[] = $prod;
}
unset($product, $json);
var_dump($products);
Собираем через array_map
:
$json = json_decode($json, true);
$json = $json['products'];
$products = [];
array_map(function($product) use(&$products, $domen_crm, $apikey_crm) {
$name = $product['name'] ?? '';
$quantity = $product['quantity'] ?? '';
$prod = [
'quantity' => $quantity,
'offer' => [
'id' => namesku_to_id($name, $domen_crm, $apikey_crm)
]
];
if (($options = $product['options'] ?? [])) {
$prod['properties'] = array_map(function($options) {
return [
'name' => $options['option'],
'value' => $options['variant']
];
}, $options);
}
$products[] = $prod;
}, $json);
unset($json);
var_dump($products);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как загрузить на сайт изображение в base64, отправив post-запрос с nodejs с именем изображения и самим base64?
Есть сервер, где выполняется обработка изображений и видеоОбращения к скрипту на сервере для обработки идут двух типов: от не авторизованных...
![На фото я уже использую готов Vector а мне нужно сделать собственный]11