개발 Q&A

제목 php 배열 질문있습니다. 로그 데이터 빈 값 채우기 관련
카테고리 PHP
글쓴이 학학이 작성시각 2016/11/23 09:34:28
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 12576   RSS

로그 데이터 개수를 그래프로 뿌려주는 작업을 하고 있습니다.

 

백 서버에서 받아온 데이터를 화면에 표시하는 작업인데.

5분 단위로 데이터를 가져옵니다. 데이터는 php에서 로그 서버로 rest 통신으로 데이터를 가져옵니다.

 

문제는 24시간 단위 5분씩이면 288개의 데이터를 가져와야하는데

1) 수집기간이 24시간 보다 작으면 288개 미만의 데이터를 가져옵니다. ( 1시간이면 12 개 )

2) 특정 수집기간에 로그 데이터를 못 가져 올 수도 있습니다. ( 백 서버에서 수집 못한 경우 )

 

이런한 데이터가 없는 상황까지 고려해서 288개 모두 데이터를 뿌려줘야합니다.

 

지금 생각하고 있는 방안이 288개의 빈 데이터를 만들고 가져온 데이터가 있으면 넣어주려고 하는데

너무 많은 for 문을 쓰는 것 같습니다. 어떻게 해야 효율적으로 비어있는 시간에 디폴트 값을 줄 수 있을까요?

 

서버에서 가져온 데이터

Array
        (
            [0] => stdClass Object
                (
                    [date] => 2016-11-22 14:35:00.0
                    [log] => 0
                )

            [1] => stdClass Object
                (
                    [date] => 2016-11-22 14:40:00.0
                    [log] => 3
                )

            [2] => stdClass Object
                (
                    [date] => 2016-11-22 14:45:00.0
                    [log] => 4
                )

            [3] => stdClass Object
                (
                    [date] => 2016-11-22 14:50:00.0
                    [log] => 5
                )

            [4] => stdClass Object
                (
                    [date] => 2016-11-22 14:55:00.0
                    [log] => 6
                )
        )

 

임의로 만든 288개의 dummy 데이터

        Array
        (
            [0] => Array
                (
                    [date] => 2016-11-23 09:50:00.0
                    [log] => 0
                )

            [1] => Array
                (
                    [date] => 2016-11-23 09:45:00.0
                    [log] => 0
                )
        ......
        ......
        ......
        
            [286] => Array
                (
                    [date] => 2016-11-22 10:00:00.0
                    [log] => 0
                )

            [287] => Array
                (
                    [date] => 2016-11-22 09:55:00.0
                    [log] => 0
                )

        )

 

최종적으로 원하는 데이터는 288개의 데이터이고

받아온 데이터가 있는 경우의 log는 받아온 결과를 넣어주고 나머지는 0으로 채우고 싶습니다.

 

 다음글 이런 화면을 구성하고 싶은데 도저히 감이 안잡혀서요.. (3)
 이전글 구글 차트 질문있습니다 ㅠㅠ (1)

댓글

배강민 / 2016/11/23 09:58:03 / 추천 0

그냥 막 간단히 해본겁니다. 더 좋은 방법이 아주 많을 수도 있습니다.

가져온데이터의 갯수만큼을 뺀 나머지를 array_fill 로 세팅하고 두 배열을 array_merge 하는 방식입니다.

 

$defaultDate = date('Y-m-d H:i:s');
$getData = [
    [
        'date' => '2016-01-01 01:01:01',
        'log' => 1,
    ],
    [
        'date' => '2016-01-01 02:02:02',
        'log' => 2,
    ]
];
$resultMinimumCount = 288;
$getDataCount = count($getData);

echo '<pre>';
var_dump($getData);
echo '</pre>';

$fillData = array_fill($getDataCount, $resultMinimumCount - $getDataCount, ['date' => $defaultDate, 'log' => 0]);

echo '<pre>';
var_dump($fillData);
echo '</pre>';

echo '<pre>';
var_dump(array_merge($getData, $fillData));
echo '</pre>';

 

하늘치 / 2016/11/23 20:00:34 / 추천 0

내용에 있는대로 더미 배열을 미리 만들어두고, 실 데이터는 업데이트만 해주면 되지 않을까요?? 

더미 만들 때 for 한 번,

실 내용 업데이트 할 때, foreach 한 번,

총 두 번이면 될 것 같은데, 다른 뭔가가 또 있나요?