PHP로 가장 가까운 숫자 구하기 外 > Tip&Tech

본문 바로가기

Tip&Tech

PHP로 가장 가까운 숫자 구하기 外

페이지 정보

작성자 BiHon 댓글 0건 조회 338회 작성일 18-02-07 22:28

본문

숫자로만 구성된 배열에서 지정한 숫자에 가장 가까운 값을 구하는 방법입니다.
물론 이 외에도 구하는 방법은 무궁무진(까지는 아니지만 그만큼 다양)합니다.


<?php
// 테스트를 위한 랜덤한 배열 값
for ($i=0,$source=[];$i<10;$i++) $source[] = random_int(1,100); // *
// 보기 편하게 정렬. 정렬하지 않아도 문제 없음.
sort($source);
echo implode(', ', $source).'<br>';
// 지정 값(랜덤)
$value = random_int(20,80);
// 배열의 값들과 지정 값의 (절대) 차이값 배열화
for ($i=0,$cnt=count($source),$diff=[];$i<$cnt;$i++) $diff[$i] = abs($source[$i]-$value);
// 값 순차 정렬(키 유지)
asort($diff);
$min_key = key($diff);
end($diff);
$max_key = key($diff);
// 근접한 값 출력
printf('임의 지정된 숫자는 [%d]입니다.<br>', $value);
printf('이와 가장 가까운 숫자는 [%d]입니다.<br>', $source[$min_key]);
printf('이와 가장 먼 숫자는 [%d]입니다.<br>', $source[$max_key]);


PHP 버전 7.0 미만 : [] → array() 예) $source = []; → $source = array();
PHP 버전 5.4 미만 : [] → array() 예) $source = []; → $source = array();


※ 실행 결과 예

10, 24, 31, 48, 52, 56, 57, 78, 81, 89
임의 지정된 숫자는 [60]입니다.
이와 가장 가까운 숫자는 [57]입니다.
이와 가장 먼 숫자는 [10]입니다.


※ 랜덤한 데이터를 이용해 코드가 길어졌는데, 핵심만 간추리면 아래와 같습니다.

$source = [1, 4, 8, 10, 12]; // 데이터 배열
$value = 7; // 지정 값
// 각 배열의 값($source[$i])과 지정한 값($value)의 (절대)차이값을 키와 함께 배열에 할당 후
for ($i=0,$cnt=count($source),$diff=[];$i<$cnt;$i++) $diff[$i] = abs($source[$i]-$value);
// 키를 유지한 채 값을 순차 정렬해서
asort($diff);
echo $source[key($diff)]; // 처음 배열의 키를 이용해 데이터 배열에 접근해 출력. 결과는 8


어때요? 참 쉽죠?



※ 참고로 DB로는 간단하게 아래처럼 구할 수 있습니다.

SELECT 필드명 FROM 테이블명 ORDER BY ABS(필드명-지정값) ASC LIMIT 1; -- 가장 적은 차이가 나는 값
SELECT 필드명 FROM 테이블명 ORDER BY ABS(필드명-지정값) DESC LIMIT 1; -- 가장 큰 차이가 나는 값

어때요? 정말 쉽죠?

댓글목록

등록된 댓글이 없습니다.

회원로그인


Copyright © 1998~2019 DreamPHP.com All rights reserved.