3

私はこのような配列を持っています

Array
    (
    [2013-03-12] => Array
        (
            [total_clicks] => 2266
            [total_unique_clicks] => 177
        )

    [2013-03-19] => Array
        (
            [total_clicks] => 2647
            [total_unique_clicks] => 241
        )

    [2013-03-20] => Array
        (
            [total_clicks] => 2656
            [total_unique_clicks] => 245
        )
     )

今、値を表示するために次のコードを使用しています

$current=strtotime($from);
$last=strtotime($to);
while($last >= $current){
    $current_date=date("Y-m-d",$last);
    echo $daily_click[$current_date]['total_unique_clicks'];
    $last=strtotime("-1 day",$last);
}

これは値を表示していますが、「2013-03-18」という日付の値がない場合、インデックスが 2013-03-12 で値が 177 の配列から前の値を表示する必要があります。実際には現在の合計なので、値のない他の日付についてこれを表示する必要があります。つまり、変更されるまで前のカウントを表示する必要があります。これどうやってするの ?

最初に最新の日付から降順で表示する必要があるため、日付にはこの順序が必要です

4

3 に答える 3

1
// get an array of the recorded dates in descending order
$descDateOrder = $daily_click;
ksort($descDateOrder);
$descDateOrder = array_keys(array_reverse($descDateOrder));

$current=strtotime($from);
$last=strtotime($to);

// initialize to the most recent date <= $last
$prev_key = 0;
for($i = 0; $i < count($descDateOrder); $i++) {
    if (strtotime($descDateOrder[$i]) <= $last) {
        $prev_key = $i;
        break;
    }
}

while($last >= $current) {
    $current_date=date("Y-m-d",$last);

    if ($descDateOrder[$prev_key] == $current_date) {
        // use oldest date if we go past it (could break instead, to stop)
        $prev_key = min(count($descDateOrder) - 1, $prev_key + 1);
    } else {
        $current_date = $descDateOrder[$prev_key];
    }

    echo $daily_click[$current_date]['total_unique_clicks'];

    $last=strtotime("-1 day",$last);
}
于 2013-03-20T07:17:02.157 に答える
0
krsort($daily_clicks);
foreach($daily_clicks as $date => $val) {
  if($date <= $to && $date >= $from)
      echo $val['total_unique_clicks'];
}
于 2013-03-20T06:56:43.433 に答える
0
$current=strtotime($from);
$last=strtotime($to);

$array_key = array_keys($daily_click);
arsort($array_key);

while($last >= $current){
$current_date=date("Y-m-d",$last);
            if($daily_click[$current_date]['total_unique_clicks'] != '')
            {
                echo $daily_click[$current_date]['total_unique_clicks'];
            }
            else
            {
                foreach( $array_key as $value)
                {
                    if(strtotime($current_date) > strtotime($value))
                    {
                       $was_last_found = $value;
                        break;
                    }
                }
                echo $daily_click[$was_last_found]['total_unique_clicks'];
            }
            $last=strtotime("-1 day",$last);
}
于 2013-03-20T06:50:00.700 に答える