2013-06-18 144 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 . " ";  
    }