지정한 기준 날짜를 중심에 두고 위쪽 아래쪽의 데이터를 리턴 받는 함수
배열의 키는 날짜로 되어 있습니다.
이 날짜키를 기준으로 위쪽, 아래쪽의 데이터를 리턴 받는 것입니다.
원리는 기준점을 정하고 그 다음 지정한 갯수 가져오고
배열을 역으로 정렬합니다.(기존 날짜순의 역순)
그리고 또 동일한 방법으로 지정한 날짜가 나오면 그 다음 5개를 리턴합니다.
아래에서는 지정한 날짜는 리턴 대상이 아닙니다.
2023-01-02 11:11:01
2023-01-02 11:11:02
2023-01-02 11:11:03 <-- 지정 날짜일 경우
2023-01-02 11:11:04
2023-01-02 11:11:05
2023-01-02 11:11:06
2023-01-02 11:11:07
2023-01-02 11:11:08
위 형태에선 5개를 함수의 파라미터로 넣었다면 위쪽으로 3개 아래쪽으로는 5개를 리턴해줍니다.
위쪽이 3개 밖에 없으니 그것만 리턴되게 됩니다.
/**
* 날짜 범위 데이터 가져오기
*
* @param array $aDateList // 날짜를 키로 가지고 있는 배열
* @param string $baseDate // 기준이 되는 날짜
* @param int $rtnNum // 리턴받을 최대 갯수(위쪽, 아래쪽 별도)
* @return array
*/
function fetchAdjacentDataByDate( array $aDateList, string $baseDate, int $rtnNum ) : array {
$is_eqDate = false;
$aRtnData = [];
foreach ( $aDateList as $iDate => $dataVal) {
if ( $baseDate == $iDate ) {
$is_eqDate = true;
continue;
}
if ( $is_eqDate ) {
if( count($aRtnData) < $rtnNum ) $aRtnData[$iDate] = $dataVal;
else break;
}
}
// 역으로 정렬하여 위와 같은 방식으로 가져온다.
$aDataReverse = array_reverse($aDateList, true);
$is_eqDate = false;
$aRtnData2 = [];
foreach ( $aDataReverse as $iDate => $dataVal) {
if ( $baseDate == $iDate ) {
$is_eqDate = true;
continue;
}
if ( $is_eqDate ) {
if( count($aRtnData2) < $rtnNum ) $aRtnData2[$iDate] = $dataVal;
else break;
}
}
$aRtnData = array_merge($aRtnData, $aRtnData2);
return $aRtnData;
}
$aRtnData = fetchAdjacentDataByDate($aData, $indate, 2);
print_r($aRtnData);
exit;