0

たとえば、月ごとにグループ化された要素の多次元配列があります。

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");

誰かが私が間違っていることを教えてくれることを願っています

4

3 に答える 3

0

IMHO、可能であれば 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
        );
    }
}

これらのコード サンプルははるかに単純ですが、...

于 2013-04-11T17:20:30.700 に答える