【问题标题】:How to add things to an array in foreach Loop?如何在 foreach 循环中向数组中添加内容?
【发布时间】:2016-04-16 20:17:24
【问题描述】:

我想制作一个 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


代码:

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

【问题讨论】:

  • 所以显示你的代码
  • 您要求我们帮助您编写代码,但您没有发布代码。您希望我们如何提供帮助?
  • @RiggsFolly 我刚刚添加了一些代码

标签: php arrays json api foreach


【解决方案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);

【讨论】:

  • 这就是我所需要的!但它的印刷并不漂亮。它在一行中:(
  • 您使用的是什么版本的 PHP? JSON_PRETTY_PRINT 仅在 PHP5.4.0 或更高版本中可用。还要记住它的数据,其他程序不关心 PRETTY
  • 7.0.5 是 PhP 版本,我在 GoogleChrome 上查看
【解决方案2】:

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

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

【讨论】:

  • 所以,这很好。但它的印刷并不漂亮。一切都在彼此身后......
【解决方案3】:
$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);

这样用,肯定能用

【讨论】:

  • 这不是我想要的:(
猜你喜欢
  • 2016-01-30
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2015-03-28
  • 2011-08-29
相关资源
最近更新 更多