使用变量作为数组索引

问题描述:

我有由几个月分组要素的多维数组,例如:使用变量作为数组索引

Array 
(
    [2013-01] => Array 
     (
      [0] => Array 
       (
        [Project] => Array 
         (
          [id] => 1 
          [user_id] => 1 
          [created] => 2013-04-08 01:00:56 
          [modified] => 2013-04-08 01:01:40 
          [vId] => 7 
         ) 
       ) 
     ) 

    [2013-04] => Array 
     (
      [2] => Array 
       (
        [Project] => Array 
         (
          [id] => 1 
          [user_id] => 1 
          [created] => 2013-04-08 01:00:56 
          [modified] => 2013-04-08 01:01:40 
          [refimg] => uploads/smallRef.png 
         ) 
       ) 
      [3] => Array 
       (
        [Project] => Array 
         (
          [id] => 1 
          [user_id] => 1 
          [created] => 2013-04-08 01:00:56 
          [modified] => 2013-04-08 01:01:40 
         ) 
       ) 
      [4] => Array 
       (
        [Project] => Array 
         (
          [id] => 1 
          [user_id] => 1 
          [created] => 2013-04-08 01:00:56 
          [modified] => 2013-04-08 01:01:40 
         ) 
       ) 
     ) 
) 

现在我要遍历个月,每个月我要上进行计数阵列为特定月份:

$currMonth = date('Y-m-d'); 
while (strtotime($currMonth) >= strtotime($firstMonth)) { 
    $curM = date('Y-m', strtotime($currMonth)); 
    count($grouparr[$curM]); 
    $currMonth = date ("Y-m-d", strtotime("-1 month", strtotime($currMonth))); 
} 

这似乎并不奏效。我收到以下错误:

Uncaught SyntaxError: Unexpected token < 

如果我手动输入一切正常,例如日期,如果我取代这个在上面的代码:

count($grouparr["2013-01"); 

我希望有人能告诉我,我是什么做错了

+1

这段代码没有语法错误吗? – bwoebi 2013-04-11 16:52:17

+1

代码 – 2013-04-11 16:53:20

+1

中甚至没有' 2013-04-11 16:53:47

foreach($yourarray as $month) { 
echo sizeof($month); 
} 

foreach ($grouparr as $month => $values) { 

    echo "$month: " . count($values) . "<br />"; 

} 
+0

为什么投票表决? – michi 2013-04-11 17:06:59

恕我直言,不使用的strtotime()函数,如果你能帮助它。我不确切地知道你的最终结果可能是什么,但是当我像这样迭代数组时,让我提供一些选择。

首先,如果你只是想通过数组循环...

foreach ($grouparr as $key => $val) { 
    list($year, $month) = explode("-", $key, 2); 
    printf("%s, %s has %s records", 
     $month, 
     $year, 
     is_array($val) ? count($val) : 0 
    ); 
} 

或者,也许你想通过过去12个月...

for ($i = 1; $i <= 12; $i++) { 
    //Use this timestamp for all your date calculations 
    $mytime = mktime(0, 0, 0, date("n") - $i, 1, date("Y")); 

    if (array_key_exists(date("Y-m", $mytime), $grouparr)) { 
     printf("%s, %s has %s records", 
      date("F", $mytime), 
      date("Y", $mytime), 
      is_array($grouparr[date("Y-m", $mytime)]) ? count(date("Y-m", $mytime)) : 0 
     ); 
    } 
} 

这些代码示例可以要简单得多,但...