2013-09-28 152 views
0

我試圖通過更多的多維數組工作來減少我不得不做的SQL查詢的數量。問題是,它們對我來說是新的。有人可以給我一些方向如何完成這一點?多維數組按月分組

這裏的數組的例子:

Array 
(
    [0] => Array 
     (
      [0] => 2013-07-01 
      [1] => Andy 
      [2] => Hopkins Module 
     ) 

    [1] => Array 
     (
      [0] => 2013-07-01 
      [1] => Frank 
      [2] => Rotation 
     ) 

    [2] => Array 
     (
      [0] => 2013-07-01 
      [1] => James 
      [2] => Morning Report 
     ) 

    [3] => Array 
     (
      [0] => 2013-08-01 
      [1] => James 
      [2] => Noon Conference 
     ) 

該陣列繼續上多了很多名字和幾個月。數據按名稱排序,這意味着所有詹姆斯項目都列在一個組中。每組名稱可能有一個或多個數據點。我想要做的是循環每個月並打印出第二個和第三個值。我知道如何做一段時間的陳述來打印一切,但我不知道如何按月將所有數據分組。

+1

這是錯誤的方法。首先,你應該嘗試優化你的SQL,這樣你就不必在數組上工作太多。 – djot

+0

這裏有一些好主意:http://stackoverflow.com/questions/2189626/group-a-multidimensional-array-by-a-particular-value(我**可以寫代碼,但它是更好/如果你自己做的話會更有價值)。 – Styxxy

+0

@djot,數據不一定必須來自SQL數據庫。 – Styxxy

回答

1

試試這個(它假定你表現出數組賦值給變量$old_array):

foreach ($old_array as $key => $value) { 
    $new_array[$value[0]][] = array($value[1], $value[2]); 
} 
// Uncomment the next line to print the new array 
// print_r($new_array); 
0

我能夠與jerdiggity的代碼修改後的版本做...的唯一途徑我可以讓它工作非常難看。這些很多嵌套循環是共同的嗎?

foreach ($incomplete as $key => $value) { 
     $new_array[$value[0]][$value[1]][] = $value[2]; 
    } 


    foreach($months as $k=>$v) { 
     $format = formatDate($v); 
     echo $format; // date formatted as readable 
     foreach($new_array[$format] as $k1=>$v1){ 
      echo $k1.'<br>'; //name of person 
      foreach($v1 as $k2=>$v2) { 
       echo $v2.'<br>'; //third value or original array 
      } 
     } 
    }