FOR 사이클의 출력으로 0 번째 배열 요소에 문제가 있습니다. 서버에서 ABCDE 문자를 인쇄하고 싶습니다. 배열의 요소와 다른 것이 있으면 다른 것을 인쇄해야합니다. 그래서 나는 그것에 대한 조건과 switch 문을 만들었습니다.
그러나 배열의 0 번째 요소는 항상 다른 요소로 인쇄됩니다. 내가 뭘 잘못하고 있는지 모르겠다. 제발 날 좀 도와 줄 수 있니? 왜 이런 일이 발생하는지 설명해 주시겠습니까?
<?php
$array = array(0,1,2,3,4,"something");
for($i=0;$i<count($array);$i++){
echo '<br>'.$i;
if ($array[$i] == 'something') {
echo ' something ';
} else {
switch ($array[$i])
{ case "0":
echo ' A';
break;
case "1":
echo ' B';
break;
case "2":
echo ' C';
break;
case "3":
echo ' D';
break;
case "4":
echo ' E';
break;
default:;
};
};
};
?>
내 출력은 다음과 같습니다.
0 something
1 B
2 C
3 D
4 E
5 something
그러나 나는 이것을 기대하고있다 :
0 A
1 B
2 C
3 D
4 E
5 something
정수 0
와 문자열을 비교할 때 "something"
문자열은 정수로 캐스트됩니다. 보다:
var_dump((int) 0); // yields int 0
var_dump((int) 'something'); // yields int 0
PHP 버그 요청 39579를 참조하십시오 . 이것은 버그가 아니며 "예상"대로 작동합니다.
적절한 비교는 엄격한 같음 ( 값 과 유형 을 테스트하는 등호 3 개)을 사용해야합니다 .
if ($array[$i] === 'something') {
echo ' something ';
}
또는 비교 중에 "알려진 / 가정 된"유형을 일시적으로 캐스트 하고 여전히 느슨한 동등성을 유지할 수 있습니다.
if ((string) $array[$i] == 'something') {
echo ' something ';
}
// OR with strval
if (strval($array[$i]) == 'something') {
echo ' something ';
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다