如何在foreach循环中向数组添加内容?

时间:2016-04-16 20:17:25

标签: php arrays json api foreach

我想创建一个API,它将来自IMAP服务器的电子邮件发送到JSON输出。我可以得到邮件等。 我使用数组创建JSON输出:

$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循环中的两个变量但它不起作用:(

希望你能帮助我,

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

在每次执行循环时都会覆盖数组。要添加元素,您必须执行以下操作:

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

答案 2 :(得分: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);

使用这样,它肯定会起作用