Работа с анонимными функциями
Есть массив товаров
array (
0 => 'Наименование товара №1_~-250$_~-99$',
1 => 'Наименование товара №2_~-699$_~-399$',
2 => 'Наименование товара №3_~-299$_~-149$',
)
Еще массив параметров, которым соответствую характеристики товаров
array (
0 => 'Наименование',
1 => 'Старая цена',
2 => 'Новая цена',
)
Получаю эти данные из <input type="checkbox" name="upsell[]">, атрибут value заполняю с помощью JS считывая содержимое определенных тегов и через конкатенацию соединяю три строки в одну. Крякозябра _~- - это разделитель, которым в JS соединяю строки, потом в PHP разбираю строку с помощью explode()
$upsells = ['Наименование товара №1_~-250$_~-99$', 'Наименование товара №2_~-699$_~-399$', 'Наименование товара №3_~-299$_~-149$',];
$orderDetails = ['Наименование', 'Старая цена', 'Новая цена'];
$enumerationGoods = function($upsells) {
$productInformation = explode('_~-', $upsells);
$numberProduct .= '<b>Товар №</b> '.($number += 1).':<br />';
$orderDetails = ['Наименование', 'Старая цена', 'Новая цена'];
for ($i = 0; $i < count($productInformation); $i++) {
$nomination .= '<b>'.$orderDetails[$i].':</b> '.$productInformation[$i].'<br />';
}
return $numberProduct . $nomination;
};
$html_parts = array_map($enumerationGoods, $upsells);
echo implode('', $html_parts);
Результат
Товар № 1:
Наименование: Наименование товара №1
Старая цена: 250$
Новая цена: 99$
Товар № 1:
Наименование: Наименование товара №2
Старая цена: 699$
Новая цена: 399$
Товар № 1:
Наименование: Наименование товара №3
Старая цена: 299$
Новая цена: 149$
Как исправить работу счетчика товаров?
Ответы (2 шт):
К $upsells можно применить array_map и получить массив кусков html.
Анонимная функция передается в array_map, получает на вход 1 $upsell и возвращает 1 кусок html, который ему соответствует.
Потом куски html можно соединить через implode
$render_upsell = function($upsell) {
$productInformation = explode('_~-', $upsell);
...
return '<b>'.$orderDetails[$i].':</b> '.$productInformation[$i].'<br />';
};
$html_parts = array_map($render_upsell, $upsells);
Если ты не можешь понять, как работают анонимные функции - ну не используй их:
$upsells = ['Наименование товара №1_~-250$_~-99$', 'Наименование товара №2_~-699$_~-399$', 'Наименование товара №3_~-299$_~-149$',];
$orderDetails = ['Наименование', 'Старая цена', 'Новая цена'];
$text = '';
foreach ($upsells as $upsell) {
$productInformation = explode('_~-', $upsell);
for ($i = 0; $i < count($productInformation); $i++) {
$text .= '<b>'.$orderDetails[$i].':</b> '.$productInformation[$i].'<br />';
}
}
echo $text;