2014-12-05 91 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);