2013-06-18 145 views
4

编辑:Nico Parodi的回答是正确的。我最终会回过头来找出原因,但现在我会继续采取它,希望没有其他的失败。迭代数组/散列图

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

通过复制粘贴从php mysql group by date with yyyy-mm-dd format一些代码,我已经成功地得到这个数组,日期 - >名称:

$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] . " ";  
     } 
    } 
} 
+0

请编辑,我还看不出来 - 这是我的代码的简化版本。实际编译/运行良好。 – Buffalo

+0

@Buffalo这里:'$ row ['date'])]' – hjpotter92

+0

是的,好点!我在那里有一个substr()调用。 – Buffalo

回答

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

$ rowCol有你想象得那么mysqli_fetch_array领域的双()获取既是关联和数字数组。 因此,

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

应该工作。

+0

正确,非常感谢! – Buffalo

+0

由于mysqli_fetch_row()仅作为数值数组获取,因此您现在拥有您总是期望的字段数,因此在这种情况下,您不必使用count($ rowCol)/ 2,只需像以前一样使用count($ rowCol )。 – Nico

+0

使用var_dump($ rowCol)打印数组并看看为什么它有两个字段 – Nico

1

你能告诉我们这段代码的输出是什么? (显示纯文本,没有HTML):

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

    foreach($event as $key => $value){ 
     print_r($value); 
    } 

    echo "\n"; 
} 

原来的答复:

$events包含一个单一的事件,你的代码应该看起来更像是这样的:

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

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

    echo "\n"; 
} 
+0

这会打印出“2001-02:Array 2012-02:Array 2012-03:Array 2013-03:Array Array”。 – Buffalo

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

这部分代码不起作用,因为rowCol是关联数组+数字数组。尝试用mysqli_fetch_row更换mysqli_fetch_array

+0

介绍适当的foreach?相信我,我试图无济于事。 – Buffalo

+0

更新:我的错,尝试用mysqli_fetch_row替换mysqli_fetch_array – Karim

1

替换:

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

通过

foreach($rowCol as $k =>$v) { 
     echo $v . " ";  
    }