이 코드를 switch문이나 array로 사용하는 방법 알려주세요!!

이 코드를 switch문이나 array로 사용하는 방법 알려주세요!!

QA

이 코드를 switch문이나 array로 사용하는 방법 알려주세요!!

본문


 if($point <= 500 && $good <= 5 && $attend <= 3) { echo '첫번째'; }
 else if($point <= 600 && $good <= 10 && $attend <= 5) { echo '두번째'; }
 else if($point <= 700 && $good <= 15 && $attend <= 10) { echo '세번째'; }
 else if($point <= 800 && $good <= 20 && $attend <= 15) { echo '네번째'; }
 else if($point <= 900 && $good <= 25 && $attend <= 20) { echo '다섯번째'; }

 

위와 같이 각 3개의 변수들을 고정된 값과 비교해야 하는데

비교해야 하는 고정 값이 많아서 짧게 스위치나 배열로 사용하고 싶습니다.

 

짧게 예제 하나만 부탁드려도 될까요?

이 질문에 댓글 쓰기 :

답변 2


$n = $point . sprintf('%03d', $good) . sprintf('%03d', $attend);
$arr = array(500005003, 600010005, 700015010, 800020015, 900025020);
foreach($arr as $k =>$v) if ($n <= $v) break;
echo ++$k . '번째';

답변 감사합니다.
테스트 해보니 "1번째"만 뜹니다.

그리고 $point에는 단위가 1000이 되든, 10000이 되든
그 다음 $good, $attend도 읽을 수 있나요?

==================================================

sprintf 사용하신 $good과 $attend 출력해보니
$good의 변수 값이 15면 015 이런 식으로 출력 되더라구요..

그래서 값이 똑같지 않아서 $k가 ++되지 않는 것 아닐까요?


function order($point, $good, $attend) {
    $n = $point . sprintf('%03d', $good) . sprintf('%03d', $attend);
    $arr = array(500005003, 600010005, 700015010, 800020015, 900025020);
    for ($i=0; $i<count($arr); $i++) 
        if ($n <= $arr[$i]) break;
    return $i == count($arr) ? '해당없음' : ++$i . '번째';
}

$point = 500; $good = 5; $attend = 3;
echo order($point, $good, $attend);
echo '<br>';

$point = 600; $good = 10; $attend = 5;
echo order($point, $good, $attend);
echo '<br>';

$point = 700; $good = 15; $attend = 10;
echo order($point, $good, $attend);
echo '<br>';

$point = 800; $good = 20; $attend = 15;
echo order($point, $good, $attend);
echo '<br>';

$point = 900; $good = 25; $attend = 20;
echo order($point, $good, $attend);
echo '<br>';

$point = 1900; $good = 25; $attend = 20;
echo order($point, $good, $attend);
echo '<br>';

// output
1번째
2번째
3번째
4번째
5번째
해당없음

만들어봤는데.. 더 복잡하네요..ㅋ


$point_arr = array(1=>'500', 2=>'600', 3=>'700', 4=>'800', 5=>'900');
 $good_arr = array(1=>'5', 2=>'10', 3=>'15', 4=>'20', 5=>'25');
 $attend_arr = array(1=>'3', 2=>'5', 3=>'10', 4=>'15', 5=>'20');
 $name_arr = array(1=>'첫번째', 2=>'두번째', 3=>'세번째', 4=>'네번째', 5=>'다섯번째');
 foreach($point_arr as $key => $val) {
     if($point<$val) $point_num=$key;
 }
  foreach($good_arr as $key => $val) {
     if($good<$val) $good_num=$key;
 }
 foreach($attend_arr as $key => $val) {
     if($attend<$val) $attend_num=$key;
 }
 $max_num = max($point_num,$good_num,$attend_num);
 echo $name_arr[$max_num];

답변 감사합니다.

echo로 첫번째, 두번째 표현해줘야 하는 코드는 <img> 태그를 사용해야 하는데
이 부분은 배열 안쓰고 반복문으로만 가능할까요?

echo '<img src="http://test.com/' . $배열첫번째순서~마지막순서까지; . '.gif">';

=====================================================

그리고

array($point=>"500", $good=>"5", $attend=>"7"),
array($point=>"600", $good=>"10", $attend=>"15"),
array($point=>"700", $good=>"15", $attend=>"20"),

이런 식으로 한줄로 묶을 수도 있을까요?

답변을 작성하시기 전에 로그인 해주세요.
전체 123,621 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT