Я пытаюсь эхо-массива в теле сообщения 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()
ничего не делает.