Я пытаюсь эхо-массива в теле сообщения sendmail. Я создал функцию для печати массива POST:
function printArray($array, $pad=''){ foreach (array_slice($array, 3) as $key => $value){ echo $pad . "$key: $value <br>"; if(is_array($value)){ printArray($value, $pad.' '); } } }
Он отлично печатается как через print_r
printArray($_POST);
и если положить переменную
$Parray = printArray($_POST); echo $Parray;
Но я не получаю это в сообщении sendmail:
$message = printArray($_POST); mail($to, $subject, print_r($message), $headers);
Вышеприведенный код отправляет электронное письмо с сообщением «1». Не могу понять, что я делаю неправильно здесь? поскольку массив отлично отлаживается, его просто sendmail, который его не печатает.
Вы используете echo в функции printArray , которая отправляет данные на стандартный вывод (так что вы можете видеть вывод на экране). Но если вы хотите использовать результат функции в переменной (например, $message ), вам нужно вернуть значение из вашей функции.
Поскольку ваша функция является рекурсивной (она вызывает себя), вам придется собирать выходные вызовы функций в локальной переменной, а затем возвращать накопленное значение.
Поэтому я бы printArray() функцию printArray() чтобы вернуть построенное сообщение в виде строки, рядом с ее печатью. Что-то вроде этого:
function printArray($array, $pad=''){ $buffer = array(); foreach (array_slice($array, 3) as $key => $value){ $buffer[] = $pad . "$key: $value <br>"; if(is_array($value)){ $buffer[] = printArray($value, $pad.' '); } } $output = join('', $buffer); echo $output; return $output; }
Также, как упоминалось в других ответах, print_r() будет печатать параметр (аналогично функции printArray() в вопросе), но возвращаемое значение не является напечатанным значением, если вы не передадите второй параметр как true , что приведет к тому, что print_r вернет строковое значение.
Функция print_r возвращает 1 если вы не добавили второй параметр TRUE , если вам нужен вывод буфера, затем используйте 2- й параметр true в функции print_r
$message = print_r($_POST, true); mail($to, $subject, $message, $headers);
Кажется, $value также может быть array() , поэтому вы не можете напрямую передать $value . Поскольку вы проверили значение is_array() в if() , вы можете разместить echo $pad . "$key: $value <br>"; echo $pad . "$key: $value <br>"; в else части. Можете попробовать:
function printArray($array, $pad=''){ foreach (array_slice($array, 3) as $key => $value){ if(is_array($value)){ printArray($value, $pad.' '); }else{ echo $pad . "$key: $value <br>"; } } }
Вы не должны использовать print_r($message) внутри mail() , просто используйте вместо этого $message var. Как mail($to, $subject, $message, $headers);
Также вы ничего не возвращали из printArray() , поэтому
$Parray = printArray($_POST); echo $Parray;
здесь echo $Parray; ничего не показывать!
В нижнем разделе
$message = printArray($_POST); mail($to, $subject, $message, $headers);
$message is empt() потому что printArray() ничего не делает.