2016-06-29 7 views
0

ここ3时间、私は超疲れていて、このことをどのように動作させるかわからない。 は、次の配列は、データベースから返されると、最後の7日間のページビュー、日付やメッセージなどの情報が含まれている:配列形式と並べ替え

Array 
(
    [0] => Array 
    (
     [vws] => 9 
     [mss] => 0 
     [dt] => 2016-06-27 
    ) 

    [1] => Array 
    (
     [vws] => 4 
     [mss] => 0 
     [dt] => 2016-06-26 
    ) 

    [2] => Array 
    (
     [vws] => 1 
     [mss] => 0 
     [dt] => 2016-06-24 
    ) 

    [3] => Array 
    (
     [vws] => 7 
     [mss] => 0 
     [dt] => 2016-06-23 
    ) 

) 

この配列はデータが含まれている必要がありそこにはページビューがありませんかメッセージが送ら場合でもので、これは何です探している:

Array 
(
    [0] => Array 
    (
     [vws] => 0 
     [mss] => 0 
     [dt] => 2016-06-22 
    ) 

    [1] => Array 
    (
     [vws] => 13 
     [mss] => 1 
     [dt] => 2016-06-23 
    ) 

    [2] => Array 
    (
     [vws] => 7 
     [mss] => 3 
     [dt] => 2016-06-24 
    ) 

    [3] => Array 
    (
     [vws] => 45 
     [mss] => 10 
     [dt] => 2016-06-25 
    ) 

    [4] => Array 
    (
     [vws] => 0 
     [mss] => 0 
     [dt] => 2016-06-26 
    ) 

    [5] => Array 
    (
     [vws] => 0 
     [mss] => 0 
     [dt] => 2016-06-27 
    ) 

    [6] => Array 
    (
     [vws] => 5 
     [mss] => 1 
     [dt] => 2016-06-28 
    ) 

) 

申し訳ありませんが私は十分に明確ではない場合。私はあなたの詳細を必要とする場合私の質問を更新します。 は事前

EDITキーとしてdt値を使用すると、良いアイデアですが、私はまだ同じ結果がin_arraydt値をチェックすることで、より容易に達成することができることを考えているようです でいただきありがとうございます。

@ArtisiticPhoenixのおかげで、このコードは今のところうまく動作します:

$new = []; 
    foreach ($data as $k => $v) { 
     $new[$v['dt']] = $v; 
    } 

    $Date = new DateTime(); 
    $days = []; 
    for ($i = 0; $i < 7; ++$i) { 
     $days[$Date->format('Y-m-d')] = [ 
      'vws' => 0, 
      'mss' => 0, 
      'dt' => $Date->format('Y-m-d') 
     ]; 
     $Date->modify('-1 days'); 
    } 
    $final = array_merge($days, $new); 
+0

ボトムカラムのデータをデフォルトにしたいのですか? –

+0

最後の7日間の日付範囲を作成して配列を準備し、配列全体を空の値で埋めることができます。次に値を置き換えるか、配列を取得して最後の7行方不明のものを追加します。動けなくなる?現在のコード/試行を追加してください。 – Rizier123

+0

私は最後の7日の配列を入れてループ内の 'in_array'でチェックしようとしましたが、何らかの理由で最後の配列の先頭または最後に捨てられた日が置かれます – AnfEn

答えて

1

初とそれをマージするarray_mergeを使用して、空の値

//current date 
$Date = new DateTime(); 

$days = array(); 
//loop 7 times, seven days in the week (forget if it should be <=) 7s to high for me to count in my head right now. :)~ 
for($i = 0; $i<7; ++$i){ 
    $days[$Date->format('Y-m-d')] = array(
     'vws' => 0, 
     'mss' => 0, 
     'dt' => $Date->format('Y-m-d') 
    ); 
    //subtract 1 day from today's date. 
    $DateTime->modify('-1 days'); 
} 

次で毎日の配列を作成dbデータ

$data = array_merge($days, $dbDays); 

準備された配列のキーは日付です。これをdbに取り込んだデータに追加したい場合、array_mergeは、エントリを追加するのではなく、それらの値を置き換えます(番号が付いたインデックスの場合と同じように)。いずれにせよ、それはまた、あなたがこの

while(false !== ($row = $stmt->fetch())){ 
    $days[$row['dt']] = $row; 
} 

のように、DBからwhileループでそれらを追加することができます。しかし、データが(mysql_どこから来るか私はわからないそんなに簡単

データを相関させmysqli_ PDO)

+0

ごめんなさい。私はSOのマークダウンを使用する方法を忘れて:)。私はちょうど私の質問を更新し、私は作業コードを追加しました。もう少し効率的にする方法はありますか?ありがとうございます – AnfEn

+0

実際には日付を手動で行うことはできますが、1週間(7日間)が月境界か年境界を越えるかどうかを検討すると、それはずっと難しくなります。 7日間のようなものは、パフォーマンスが問題になることはありません。どのようにスライスしても、7日間の日付を知る必要があります。 – ArtisticPhoenix