为什么我只得到带有 foreach 循环的数组的最后一个条目 [closed]

Why I get only the last entrie of array with foreach loop [closed]

提问人:maximiliansport 提问时间:6/30/2022 最后编辑:Dharmanmaximiliansport 更新时间:6/30/2022 访问量:262

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

去年关闭。

我想将带有键“weekday, date”的 Databaseentrise 保存在带有数组的数组中。 (想法是我可以在工作日的 xxx 数组中保存 xx 个客人。并输出工作日xxx或周一至周日的客人列表。

之后,我想输出数组。 数组应该是两个条目,但在输出中它只显示最后一个条目。 我错了什么?

我的MySQL数据库是这样的: 客人:

同上 名字 姓氏 开始日期 日期
1 奥托 测试 2022-06-30 2022-06-30
2 安娜 测试w 2022-06-30 2022-06-30
3 彼得 Testma的 2022-06-27 2022-06-29
<?php
//DB: Connection
   $mysqli = new mysqli("localhost", "root", "", "Belegung");
//Errorhandling
if ($mysqli -> connect_errno)
{
   echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
   exit();
}

//Prepare Array
$calendar = array ();
    
//DB: SQL: 
$sql = "SELECT * FROM `guests` WHERE `begindate` = '2022-06-30'";                       
$result = $mysqli->query($sql) or die( $result->error); 


//Fillign Array Key: *Monday, YYYY-MM-DD* - *Sunday, YYYY-MM-DD* and as Array name of guests

while ($row = $result->fetch_object())
{
   $calendar['2022-06-30'] = array ($row->firstname . " " . $row->lastname);
      //With print_r($row->firstname) I get here two names, so it should work but:
}


//Output
$tag ='2022-06-30';
           
echo "<ul>";
foreach ($calendar[$tag] as $ausgabecal)
{
   echo "<li>" . $ausgabecal . "</li>" ."<br/>";
      //Here I got only the last one "Anna
}
echo "</ul>";
    
$result -> free_result();
$mysqli -> close();
?>
PHP 多维数组 MySQLI

评论

2赞 brombeer 6/30/2022
因为在每次迭代中都会覆盖该键的条目。使用或array_push。另外,不需要使用,一个简单的就可以了$calendar['2022-06-30'] = ...$calendar['2022-06-30'][] = ...array ($row->firstname . " " . $row->lastname);$row->firstname . " " . $row->lastname;
0赞 Dharman 6/30/2022
在代码中使用这是一个非常糟糕的主意,因为它可能会泄露敏感信息。有关更多解释,请参阅此帖子:mysqli 或 die,它必须死吗?die(mysqli_error($$conn));
0赞 maximiliansport 6/30/2022
谢谢你们三个的提示。这对我帮助很大!:-)谢谢你的安全@Dharman:我会看看你的帖子。

答:

0赞 Ali SSN 6/30/2022 #1

你应该在你的循环中使用它

while ($row = $result->fetch_object())
{
   $calendar['2022-06-30'][] = array ($row->firstname . " " . $row->lastname);
}

评论

0赞 maximiliansport 6/30/2022
好!谢谢你,非常mutch!是的,现在我也看到了我对大脑:-D的失误现在,该段落的外观和工作方式与之前的输出代码类似:while ($row = $result->fetch_object()) { $calendar['2022-06-30'][] = $row->firstname . " " . $row->lastname; }
0赞 Ali SSN 6/30/2022
这很好,但最好使用动态日期键: $calendar[$row->begindate][] = array ($row->firstname ." " .$row->姓氏);}