vadikvip777
Здравствуйте. Есть небольшой php код
PHP:
foreach ($order_product_query->rows as $product) { $product[0] .= $product[‘model’]; //Модель $product_kol[0] .= $product[‘quantity’]; //Количество }выводит модель товара и количество, после отправляет в CRM
Все работает, но столкнулся с проблемой, товаров обычно больше одного, и надо 0 заменить на переменную, к примеру пусть будет $i = 0создал такой код:
PHP:
$i= 0; foreach ($order_product_query->rows as $product) { $product[$i] .= $product[‘model’]; $product_kol[$i] .= $product[‘quantity’]; $i++; }По идеи после добавления каждого товара должно добавляться +1, но почему-то не работает
Я в php новичок, подскажите, пожалуйста, где ошибка
abrdabr
@vadikvip777 как выводишь результат?
Рихард
$i = 0; объявляешь в глобальным параметром
а потом пытаешься его исполнить локальным;
Может $i = 0 перенести в тело функции и переделать ++$i;я сам новичок
vadikvip777
отправляю в crm
вот весь код:PHP:
$i= 0; foreach ($order_product_query->rows as $product) { $product[$i] .= $product[‘model’]; $product_kol[$i] .= $product[‘quantity’]; $i++; } //детали заказа в кодировке utf-8 $param[‘secret’] = «000»; //ключ api $param[‘phone’] .= $order_info[‘telephone’]; //телефон $param[‘name’] .= $order_info[‘payment_firstname’]; //имя клиента //подготовка запроса foreach ($param as $key => $value) { $data .= «&».$key.«=».$value; } //содержимое заказа foreach ($product as $key => $value){ $data .= «&product[«.$key.«]=».$value.«»; $data .= «&product_kol[«.$key.«]=».$product_kol[$key].«»; $data .= «&product_mod[«.$key.«]=».$product_mod[$key].«»; } } //отправка //результат echo $result;
Рихард
echo там не нужно???
vadikvip777
нет
Рихард
$i = 0 Если закинуть в тело foreach не поможет?
vadikvip777
Нет
получается что мы каждый раз будем сбрасывать $i = 0, то есть ++$i не работает)
Рихард
тогда надо включить «static» к переменной или создать ссылку на нее «&»
vadikvip777
не работает
Рихард
это называется оказал тебе медвежью услугу.
А не проще создать свою функцию и в теле функции объявить foreach
— Добавлено —
function foo()
{
static $x = 0;
echo $x++;
}
foo();
foo();
foo();Словами объяснить не могу, вчера проходит.
Попробуй так
— Добавлено —
Или так
function foo(задаешь параметры, &$x)
{
включаешь foreach
$x = 0; или static $x=0;
$x++;
}
— Добавлено —
то есть пойдет не копирование переменной а ссылка на нее
vadikvip777
так не отправляет ничего
romach
PHP:
foreach ($order_product_query->rows as $product) { $product[0] .= $product[‘model’]; //Модель $product_kol[0] .= $product[‘quantity’]; //Количество }Так, давайте по порядку. Вы в цикле проходите записи $rows каждый раз получая конкретную запись $product, в $product[0] вы записываете значения $product[‘model’], $product_kol вообще не понятно откуда берется, да и не важно всё это, потому что следующей итерацией вы получите новый $product. И зачем тут .=?
vadikvip777
Это движок OpenCart, в данном случае отправка данных о заказе на почту
В этот же файл я засунул отправку только некоторых данных на crm, выше написал код
$product[0]
и
$product_kol[0]
Создаются для сложения ссылки, которая отправит данные в crm
то есть получается так$product[0] .= $product[‘model’];
Продукт 0 берет модель товара$product_kol[0] .= $product[‘quantity’];
Продукт 0 берет количество товараи далее таких товаро может получится хоть 20, то есть по идем должно сложится
$product[0] .= $product[‘model’]; //Модель
$product_kol[0] .= $product[‘quantity’]; //Количество
$product[1] .= $product[‘model’]; //Модель
$product_kol[1] .= $product[‘quantity’]; //Количество
$product[2] .= $product[‘model’]; //Модель
$product_kol[2] .= $product[‘quantity’]; //Количество
$product[3] .= $product[‘model’]; //Модель
$product_kol[3] .= $product[‘quantity’]; //Количество.= добавил потому что иначе вообще не работало)
keren
Приведи что содержится в $order_product_query->rows и что должно быть после обработки.
vadikvip777
PHP:
foreach ($order_product_query->rows as $product) { $text .= $product[‘quantity’] . ‘x ‘ . $product[‘name’] . ‘ (‘ . $product[‘model’] . ‘) ‘ . html_entity_decode($this->currency->format($product[‘total’] + ($this->config->get(‘config_tax’) ? ($product[‘tax’] * $product[‘quantity’]) : 0), $order_info[‘currency_code’], $order_info[‘currency_value’]), ENT_NOQUOTES, ‘UTF-8’) . «n«; $order_option_query = $this->db->query(«SELECT * FROM « . DB_PREFIX . «order_option WHERE order_id = ‘» . (int)$order_id . «‘ AND order_product_id = ‘» . $product[‘order_product_id’] . «‘»); foreach ($order_option_query->rows as $option) { if ($option[‘type’] != ‘file’) { $value = $option[‘value’]; } else { $value = utf8_substr($option[‘value’], 0, utf8_strrpos($option[‘value’], ‘.’)); } $text .= chr(9) . ‘-‘ . $option[‘name’] . ‘ ‘ . (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . ‘..’ : $value) . «n«; }должна получится ссылка с данными
PHP:
//подготовка запроса foreach ($param as $key => $value) { $data .= «&».$key.«=».$value; } //содержимое заказа foreach ($product as $key => $value){ $data .= «&product[«.$key.«]=».$value.«»; $data .= «&product_kol[«.$key.«]=».$product_kol[$key].«»; $data .= «&product_mod[«.$key.«]=».$product_mod[$key].«»; } } //отправка
romach
Смотрите, у вас происходит примерно вот так:
PHP:
$rows = [1, 2, 3, 4, 5]; foreach($rows as $row) { $row++; }Действия вроде есть, но они теряются, т.к. $row каждый раз пересоздается внутри цикла и к записям в массиве $rows отношения не имеет.
Другой пример:
PHP:Тут мы ввели дополнительный массив $items, в который сохраняли результат выполнения цикла для каждой записи.
Ещё пример:
PHP:
$rows = [1, 2, 3, 4, 5]; foreach($rows as &$row) { // sic! $row++; }Тут &$row делает нам ссылку на конкретную запись в массиве, изменяя её мы изменяем само значение.
Далее, .= — это конкатенация, т.е. $a = 1; $b = 1; $a .= $b даст нам 11, а не 2. Если нужно сложить, то нужно использовать $a += $b.
В итоге, либо делаете $rows as &$product и добавляете / удаляете что вам нужно, либо создаете массив $products, туда складываете нужные значения и возвращаете уже его.
vadikvip777
что-то тип такого?)
PHP:
$product = []; $product_kol = []; $i=0; foreach ($order_product_query->rows as $product) { $product[$i] = $product[‘model’]; $product_kol[$i] = $product[‘quantity’]; $i++; }
romach
Почти, только $products, потому что $product затрет цикл.
vadikvip777
Не работает