Php 迭代数组/哈希映射

Php 迭代数组/哈希映射,php,mysql,Php,Mysql,编辑:尼科·帕罗迪的答案是正确的。我最终会回来找出原因,但现在我只想保持现状,希望没有其他事情失败 我有一个包含三个字段的表:“日期”、“名称”、“位置”。我想根据日期对从此表中选择的所有记录进行分组 通过从中复制粘贴一些代码,我成功地获得了这个数组,日期->名称: $result = mysqli_query($con,"SELECT date, name, location FROM events"); while($row = mysqli_fetch_array($result)) {

编辑:尼科·帕罗迪的答案是正确的。我最终会回来找出原因,但现在我只想保持现状,希望没有其他事情失败

我有一个包含三个字段的表:“日期”、“名称”、“位置”。我想根据日期对从此表中选择的所有记录进行分组

通过从中复制粘贴一些代码,我成功地获得了这个数组,日期->名称:

$result = mysqli_query($con,"SELECT date, name, location FROM events");
while($row = mysqli_fetch_array($result)) {
    $foo[$row['date']][]=$row['name'];
}
一切都很好,我可以毫无问题地重复它。现在我想将所有行列存储为日期键的值,因此我尝试将整行存储为值:

$result = mysqli_query($con,"SELECT date, name, location FROM events");
while($row = mysqli_fetch_array($result)) {
    $foo[$row['date']][]=$row;
}
现在我不能重复了。count($rowCol)似乎为任意一个键提供了所有数组中列的nr,而不仅仅是一个键。我如何迭代它

foreach($foo as $date => $events) {
    echo $date . ": "; // this is okay         

    foreach($events as $key => $rowCol){
        for ($i = 0; $i<count($rowCol); $i++) {
            echo $rowCol[$i] . " ";     
        }
    }
}
foreach($foo作为$date=>$events){
echo$date.“:”;//没关系
foreach($key=>$rowCol的事件){

对于($i=0;$i您能告诉我们这段代码的输出是什么吗?(显示纯文本,无HTML):


原始答复:

$events
包含一个事件,您的代码应该更像这样:

foreach($foo as $date => $event) {
    echo $date . ": ";

    foreach($event as $key => $value){
        echo $value . " ";
    }

    echo "\n";
}
对于($i=0;$i
对于($i=0;$i替换:

    for ($i = 0; $i<count($rowCol); $i++) {
        echo $rowCol[$i] . " ";     
    }

请编辑,我看不到它-这是我代码的简化版本。实际版本编译/运行良好。@Buffalo这里:
$row['date']]]
是的,很好!我在那里调用了substr()。使用
var_dump($events);
echo$date.:“
并将输出结果发布打印出来“2001-02:Array 2012-02:Array 2012-03:Array 2013-03:Array Array”。介意发布相应的foreach吗?相信我,我尝试了无效。更新:我的错,尝试将mysqli_fetch_数组替换为mysqli_fetch_row,因为mysqli_fetch_row()仅以数字数组的形式获取,因此您现在拥有了始终期望的字段数,因此在本例中,您不必使用count($rowCol)/2,只需像以前一样使用count($rowCol)。使用var_dump($rowCol)要打印数组并查看它为什么有双字段问题:我在迭代时是否也可以获取键?表列的名称?是的,要这样做,您应该更改mysqli_fetch_array调用以仅将结果提取到关联数组中-然后您可以使用
foreach($rowCol as$colName=>$val)
for ($i = 0; $i<count($rowCol); $i++) {
        echo $rowCol[$i] . " ";     
    }
for ($i = 0; $i<count($rowCol); $i++) {
    echo $rowCol[$i] . " ";     
}
for ($i = 0; $i<(count($rowCol)/2); $i++) {
        echo $rowCol[$i] . " ";     
    }
    for ($i = 0; $i<count($rowCol); $i++) {
        echo $rowCol[$i] . " ";     
    }
    foreach($rowCol as $k =>$v) {
        echo $v . " ";     
    }