我试图在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);
以上代码会发送电子邮件,其中包含&#39; 1&#39;在消息中。不知道我在这里做错了什么?因为数组完美地回应,它只是不打印它的sendmail。
答案 0 :(得分:1)
您在echo
函数中使用printArray
,该函数将数据发送到标准输出(因此您可以在屏幕上看到输出)。但是如果你想在变量中使用函数的结果(比如$message
),你需要从函数中返回值。
由于你的函数是一个递归函数(它自己调用),你必须在局部变量中收集函数调用的输出,然后返回累加值。
所以我修改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()
函数相同)但返回值不是打印值,除非您将第二个参数作为{传递{1}},导致true
返回字符串值。
答案 1 :(得分:0)
似乎$value
也可能是array()
,因此您无法直接回复$value
。由于您在is_array()
条件中按if()
检查了该值,因此您可以将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
为empt()
,因为printArray()
没有任何依据。
答案 2 :(得分:0)
print_r
时, 1
函数返回TRUE
,如果你需要缓冲输出,那么使用2 nd param true
在print_r
函数
$message = print_r($_POST, true);
mail($to, $subject, $message, $headers);