2016-06-29 2 views
0

여기 3am입니다. 나는 아주 피곤해서 어떻게 작동하는지 모릅니다. 다음 배열이 데이터베이스에서 돌아와 지난 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 
    ) 

) 

죄송합니다. 충분히 명확하지 않은 경우 죄송합니다. 더 많은 정보가 필요하면 제 질문을 업데이트 할 것입니다. 사전

편집 키로 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

먼저

//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'); 
} 

다음, 사용 array_merge이와 그 병합 빈 값으로 매일의 배열을 구축 db 데이터

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

참고 준비된 배열의 키는 날짜입니다. db에 채워진 데이터에 추가 할 수도 있습니다. 이로 인해 array_merge는 항목을 추가하는 대신 해당 값을 대체합니다 (번호가 매겨진 색인이있는 경우와 동일). 데이터 (mysql_로 어디에서 오는 어떤 경우는이

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

처럼 너무 쉽게

또는

당신은 DB에서 while 루프에서 그들을에 추가 할 수있는 데이터의 상관 관계를 만든다 그러나 나는 확실하지 않다 mysqli_ PDO)

+0

지저분한 코멘트를 드려 죄송합니다. 내가 SO markdown을 사용하는 방법을 잊었습니다 :). 방금 질문을 업데이트하고 작동 코드를 추가했습니다. 조금 더 효율적으로 사용할 수있는 방법이 있습니까? 고맙습니다. – AnfEn

+0

실제로 수동으로 날짜를 지정할 수는 있지만 월 (7 일)이 월 경계 또는 연도 경계를 넘을 지 고려하면 훨씬 어려워집니다. 7 일과 같이 성능이 문제가되지 않습니다. 아무리 슬라이스해도 7 일 동안의 날짜를 알아야합니다. – ArtisticPhoenix