在sendmail中打印数组
我想在sendmail的消息主体中回显数组。我创建了一个功能打印POST数组:在sendmail中打印数组
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。
您在printArray
函数中使用echo
函数,该函数将数据发送到标准输出(因此您可以在屏幕上看到输出)。但是,如果你想在变量中使用函数的结果(如$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()
功能),但返回,除非你通过第二个参数true
值不是打印的值,这导致print_r
返回字符串值。
看来$value
也可能是array()
,所以你不能直接回显$value
。由于您在if()
条件中检查了is_array()
的值,因此可以将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
变种来代替。像mail($to, $subject, $message, $headers);
你也没回从printArray()
什么,所以
$Parray = printArray($_POST);
echo $Parray;
这里echo $Parray;
不显示任何东西!
在下面的部分
$message = printArray($_POST);
mail($to, $subject, $message, $headers);
$message
是empt()
因为printArray()
没有任何东西。
print_r
函数返回1
,当你还没有添加第二个PARAM TRUE
,如果需要缓冲输出,然后用2 第二 PARAM true
在print_r
功能
$message = print_r($_POST, true);
mail($to, $subject, $message, $headers);