2014-12-05 56 views
0

我想在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。

回答

1

您在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返回字符串值。

0

看来$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); 

$messageempt()因为printArray()没有任何东西。

0

print_r函数返回1,当你还没有添加第二个PARAM TRUE,如果需要缓冲输出,然后用2 第二 PARAM trueprint_r功能

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