2016-04-16 71 views
1

我想製作一個API,它將來自IMAP服務器的電子郵件轉換爲JSON輸出。我可以得到郵件等等。 我創建JSON輸出與陣列:如何添加東西到foreach循環中的數組?

$arr = array('number' => $overview->msgno, 'date' => $overview->date,); 

那麼,事情是,我得到的郵件中的foreach循環。 當我把這個線至環和

echo json_encode($arr, JSON_PRETTY_PRINT); 

外,只打印的最後一行。如果我把它放在循環中,它只是一個頁面,甚至是一個新的支架打開和關閉。我希望所有的輸出,以這樣的:

{ 
"1": [ 
    { 
     "author": "Mister X", 
     "title": "Here is the title" 
     "message": "Here it should print the Message" 
    }] 
"2": [ 
    {and so on}] 

}

我試過array_pusch($arr, $msgno, $date)。這兩個變量我保存在foreach循環,但它不工作:(

希望u能幫助我,

dunklesToast


CODE:

$mbox = imap_open("{mcggehrden.de:143}INBOX", $email, $login) 
    or die("can't connect: " . imap_last_error()); 

$MC = imap_check($mbox); 

$result = imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0); 

foreach ($result as $overview) { 

    $arr = array(); 
    $number = $overview->msgno; 
    $date = $overview->date; 

    array_push($arr, $msgno, $date); 

} 
echo json_encode($arr, JSON_PRETTY_PRINT); 
+0

SO證明你有 – RiggsFolly

+0

代碼你問我們,以幫助您與您的代碼,但你不發佈您的代碼。你如何期望我們提供幫助? – arkascha

+0

@RiggsFolly,我剛剛添加了一些代碼 – dunklesToast

回答

1

工作的權利您的問題是,你必須初始化要保持foreach循環裏面的所有數據數組。因此,每次循環時,您都會丟棄之前保存的任何數據,並且只加載此迭代中的數據。

另外,您正在返回一個對象,並且您的JSON結果示例顯示您需要一個對象數組,因此您可能以及採取所有返回的對象,只是把它添加到陣列

$mbox = imap_open("{mcggehrden.de:143}INBOX", $email, $login) 
    or die("can't connect: " . imap_last_error()); 

$MC = imap_check($mbox); 

$result = imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0); 

$arr = array();  
foreach ($result as $overview) { 
    $arr[] = $overview; 
} 

echo json_encode($arr, JSON_PRETTY_PRINT); 
+0

這就是我所需要的!但它不是印刷得漂亮。它在一行中:( – dunklesToast

+0

你使用的是什麼版本的PHP?'JSON_PRETTY_PRINT'是唯一的可用PHP5.4.0或更高版本。還記得它的數據,其他程序不關心PRETTY – RiggsFolly

+0

7.0.5是PhP版本,我正在GoogleChrome上查看它 – dunklesToast

0

要覆蓋陣列在循環的每次執行中添加元素,你必須這樣做:

$arr = array(); 
foreach ($result as $overview) { 
    $arr[] = array('number' => $overview->msgno, 'date' => $overview->date,); 
} 
echo json_encode($arr, JSON_PRETTY_PRINT); 
+0

所以,那很好。但它沒有真正漂亮的印刷品。 Everthing彼此背後... – dunklesToast

0
$return_arr=array(); 
$g=mysqli_query($con,"select * from YourTableName"); 
while($j=mysqli_fetch_array($g,MYSQLI_ASSOC)) 
{ 
    $row_array['arr_msgno']=$j['msgno']; 
    $row_array['arr_date']=$j['date']; 

    array_push($return_arr,$row_array); 

} 

$result['yourTableName']=$return_arr; 
echo json_encode($result); 

使用這個樣子,這將肯定

+0

其實並不是我想要的東西:( – dunklesToast

相關問題