在sendmail中打印数组

时间:2014-12-05 03:10:11

标签: php arrays forms function sendmail

我试图在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。

3 个答案:

答案 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);

$messageempt(),因为printArray()没有任何依据。

答案 2 :(得分:0)

当你没有添加第二个参数print_r时,

1函数返回TRUE,如果你需要缓冲输出,那么使用2 nd param trueprint_r函数

$message = print_r($_POST, true);
mail($to, $subject, $message, $headers);