테스트 사이트 - 개발 중인 베타 버전입니다

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

Winzr 7년 전 조회 3,301

</p>

<p> 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 '다섯번째'; }</p>

<p>

 

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

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

 

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

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
7년 전

</p>

<p>$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 . '번째';</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

W
Winzr
7년 전
답변 감사합니다.
테스트 해보니 "1번째"만 뜹니다.

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

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

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

그래서 값이 똑같지 않아서 $k가 ++되지 않는 것 아닐까요?
슈와이
7년 전
[code]
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>';
[/code]
// output
1번째
2번째
3번째
4번째
5번째
해당없음
W
Winzr
7년 전
감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

e
7년 전

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

</p>

<p>$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=>'다섯번째');</p>

<p> 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];</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

W
Winzr
7년 전
답변 감사합니다.

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"),

이런 식으로 한줄로 묶을 수도 있을까요?
e
eyekiss
7년 전
그럼 이미지 이름을 level1.gif level2.gif level3.gif~
이렇게 만들면 아래처럼 하면 됩니다.
echo '<img src="http://test.com/level' . $max_num . '.gif">';

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인