비밀번호

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

  • 짧은주소 : http://dreamphp.com/s/a0ed

  • 작 성 자 : BiHonHomepage

  • 조 회 수 : 167

  • 등 록 일 : 2018-02-07 22:28:09

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

    
    <?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; -- 가장 큰 차이가 나는 값
    
    
    어때요? 정말 쉽죠?

+ 이름

- 홈페이지

+ 내용

+ 비밀번호

* 4~20자

+ CAPTCHA

CAPTCHA Image [새로고침] (대소문자 무시)

  • 번호

  • 제목

  • 이름

  • 등록일

  • 조회수