2013-09-28 102 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 
      } 
     } 
    }