@anton_kP

Как в массив вставить цикл foreach?

Пример
Пример:
try
{
    $response = $client->request->ordersCreate(array(
        'externalId' => '18201',//Номер заказа в 1С
        'number' => '18201',//Номер заказа в 1С
        'customer' => array('externalId' => '12109'),//Код клиента в базе 1С
        'firstName' => 'Марина',//Имя клиента
        'lastName' => 'Виноградова',//Фамилия клиента
        'phone' => '7903000000',//Телефон клиента
        'email' => 'vinogradova_liza@rambler.ru',//Почта клиента
        'createdAt' => '2021-10-22 18:53:00',//Y-m-d H:i:s Дата создания заказа
        'status' => 'vobrabotke',//Статус заказа
        'managerId' => '14',//Менеджер Код
        'payments' => array(array('amount' => '6500.10', 'paidAt' => '2021-10-22 18:53:00', 'type' => 'bank-card', 'status' => 'paid')),//Платеж
        'items' => array(
array('offer' => array('externalId' => '10088'),'initialPrice' => '6500','quantity' => '1','properties' => array(array('name' => 'sph','value' => '-6,50'))),
array('offer' => array('externalId' => '10090'),'initialPrice' => '8500','quantity' => '1','properties' => array(array('name' => 'sph','value' => '-6,50'))),
        ) ,
        'orderMethod' => 'offline',//Способ оформления заказа
        'shipmentStore' => 'ikea',//Склад отгрузки
        'delivery' => array('code' => 'self-delivery', 'date' => '2021-10-22'),//Тип доставки и дата
        'shipmentDate' => '2021-10-22',//Y-m-d H:i:s Дата отгрузки
        'managerComment' => 'Принес клиент образец',//Коммент
        'customFields' => array('kassa' => 'ТЦ Mega'),//Пользовательские поля
    ));
}

Пытаюсь в items foreach вставить и получаю ошибку:
Parse error: syntax error, unexpected 'foreach' (T_FOREACH), expecting ')' in /home/public_html/api/test.php on line 61

Вот код:
try
{
    $response = $client->request->ordersCreate(array(
        'externalId' => ltrim($_GET[NUMBER],'0'),//Номер заказа в 1С
        'number' => ltrim($_GET[NUMBER],'0'),//Номер заказа в 1С
        'customer' => array('externalId' => ltrim($_GET[KLIENTKOD],'0')),//Код клиента в базе 1С
        'firstName' => $_GET[KLIENTNAME],//Имя клиента
        'lastName' => $_GET[KLIENTFIO],//Фамилия клиента
        'phone' => $_GET[PHONE],//Телефон клиента
        'email' => $_GET[EMAIL],//Почта клиента
        'createdAt' => date("Y-m-d H:i:s", strtotime($_GET[DATE])),//Y-m-d H:i:s Дата создания заказа
        'status' => $STATUSORDER,//Статус заказа
        'managerId' => '14',//Менеджер 
        'payments' => array(array('amount' => $STATUSPAY, 'paidAt' => date("Y-m-d H:i:s", strtotime($_GET[DATAPAY])), 'type' => $METODPAY, 'status' => $STATUSPAYD)),//Платеж
        'items' => array(
// Цикл товаров
foreach ($_GET[CART] as $key =>$value) {
array('offer' => array('externalId' => ltrim($_GET[CART][$key][id],'0')),'initialPrice' => $_GET[CART][$key][price],'quantity' => $_GET[CART][$key][quantity],'properties' => array(array('name' => 'sph','value' => (!empty($_GET[CART][$key][sph]) ? $_GET[CART][$key][sph] : '---')))),
}
//конец цикла товаров  
        ),
        'orderMethod' => $orderMethod,//Способ оформления заказа
        'shipmentStore' => $INSKLADDELIVERY,//Склад отгрузки
        'delivery' => array('code' => $INMETODDELIVERY, 'date' => date("Y-m-d", strtotime($_GET[DATADELIVERY]))),//Тип доставки и дата
        'shipmentDate' => date("Y-m-d", strtotime($_GET[DATADELIVERY])),//Y-m-d H:i:s Дата отгрузки
        'managerComment' => $_GET[COMMENTS],//Коммент
        'customFields' => array('kassa' => $_GET[KASSA]),//Пользовательские поля
    ));
}

Подскажите как правильно(((
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
flapflapjack
@flapflapjack
на треть я прав
В аргументах метода ordersCreate должен быть массив, а не цикл. Конечно так нельзя. Вы можете заранее подготовить массив, создавая его элементы в цикле, а потом уже использовать полученный массив в качестве аргумента.
<?
try
{
	$tmpArray=array(
        'externalId' => ltrim($_GET[NUMBER],'0'),//Номер заказа в 1С
        'number' => ltrim($_GET[NUMBER],'0'),//Номер заказа в 1С
        'customer' => array('externalId' => ltrim($_GET[KLIENTKOD],'0')),//Код клиента в базе 1С
        'firstName' => $_GET[KLIENTNAME],//Имя клиента
        'lastName' => $_GET[KLIENTFIO],//Фамилия клиента
        'phone' => $_GET[PHONE],//Телефон клиента
        'email' => $_GET[EMAIL],//Почта клиента
        'createdAt' => date("Y-m-d H:i:s", strtotime($_GET[DATE])),//Y-m-d H:i:s Дата создания заказа
        'status' => $STATUSORDER,//Статус заказа
        'managerId' => '14',//Менеджер 
        'payments' => array(array('amount' => $STATUSPAY, 'paidAt' => date("Y-m-d H:i:s", strtotime($_GET[DATAPAY])), 'type' => $METODPAY, 'status' => $STATUSPAYD)),//Платеж
        'orderMethod' => $orderMethod,//Способ оформления заказа
        'shipmentStore' => $INSKLADDELIVERY,//Склад отгрузки
        'delivery' => array('code' => $INMETODDELIVERY, 'date' => date("Y-m-d", strtotime($_GET[DATADELIVERY]))),//Тип доставки и дата
        'shipmentDate' => date("Y-m-d", strtotime($_GET[DATADELIVERY])),//Y-m-d H:i:s Дата отгрузки
        'managerComment' => $_GET[COMMENTS],//Коммент
        'customFields' => array('kassa' => $_GET[KASSA]),//Пользовательские поля
    );
	
	foreach ($_GET[CART] as $key =>$value) {
		$tmpArray['items'][]=array('offer' => array('externalId' => ltrim($_GET[CART][$key][id],'0')),'initialPrice' => $_GET[CART][$key][price],'quantity' => $_GET[CART][$key][quantity],'properties' => array(array('name' => 'sph','value' => (!empty($_GET[CART][$key][sph]) ? $_GET[CART][$key][sph] : '---'))));
	}
	
    $response = $client->request->ordersCreate($tmpArray);
	
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@KingstonKMS
...
'items' => array_map(function($key) {return array('offer' => array('externalId' => ltrim($key['id'],'0')),'initialPrice' => $key['price'],'quantity' => $key['quantity'],'properties' => array(array('name' => 'sph','value' => (!empty($key['sph']) ? $key['sph'] : '---'))));}, $_GET[CART]);
...
Ответ написан
Комментировать
@rPman
можно использовать array_map, на вход подаешь $_GET[CART] и функцию, обрабатывающую каждый элемент (то что у тебя внутри foreach)

'items' => array_map(function($v){...},$_GET[CART])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы