У меня есть форма, где пользователь может нажать на кнопку, чтобы добавить столько компонентов, сколько ему нужно. Для каждого участника у меня есть 4 поля. Эти поля автоматически добавляются с помощью скрипта, когда я нажимаю кнопку для добавления компонентов. Поля создаются как [данные], поэтому у меня есть это в моем php-файле для отправки электронного письма:
if(isset($_REQUEST['data'])){
$postdata = $_REQUEST['data'];
}
if( isset($postdata) ) {
$altri = implode('<hr>', array_chunk($postdata, 4, true));
}
else {
$altri = 'Non sono stati aggiunti altri partecipati a questa richiesta';
}
затем в моем теле $ я пытаюсь распечатать результат как:
$body = <<<EOD
<strong>Altri partecipanti:</strong><br>$altri<br>
// PHP email sender
mail($to, $sub, $body, $headers);
Как видите, я пытаюсь сгруппировать и разделить эти 4 поля в выводе электронной почты, чтобы получить что-то вроде:
разделитель
…
так далее…
Я не могу заставить его работать как положено, и я получил сообщение об ошибке «Преобразование массива в строку»
Как я мог написать код для его получения?
Заранее спасибо.
Подумать о чем array_chunk
делает. Он производит массив массивов, например
[ ['f1p1', 'f2p1', 'f3p1', 'f4p1'], ['f1p2', 'f2p2', 'f3p2', 'f4p2'] ]
Попробуйте использовать array_map
преобразовать внутренние массивы в строки. Например
$altri = implode('<hr>', array_map(function($list) {
return '<ul><li>' . implode('</li><li>', $list) . '</li></ul>';
}, array_chunk($postdata, 4)));
Это производит
<ul><li>f1p1</li><li>f2p1</li><li>f3p1</li><li>f4p1</li></ul><hr><ul><li>f1p2</li><li>f2p2</li><li>f3p2</li><li>f4p2</li></ul>
Вам нужно implode
каждый кусок отдельно, а затем implode
взорванные куски:
if( isset($postdata) ) {
$altri = [];
$chunks = array_chunk($postdata, 4, true);
foreach ($chunks as $chunk) {
$altri[] = implode('<br />', $chunk);
}
$altri = implode('<hr>', $altri);
}