2011-09-23 3 views
1

짧은 질문입니다.키가 설정되어 있지 않지만 배열 크기> 0

다음 예 주어진다 :

$arr = array(); 
$arr[0] = false ?: NULL; 
var_dump($arr[0]); 
var_dump($arr[1]); 
var_dump(isset($arr[0])); 
var_dump(isset($arr[1])); 
var_dump(count($arr)); 

결과 출력은 :

NULL 
NULL 
bool(false) 
bool(false) 
int(1) 

이유 결과 배열 1 대신에 0의 크기를 가질 않고,이를 방지 할 수있는 방법이 존재 삼항 연산자를 사용할 때 어떻게됩니까? 버그입니까? 의도 한 행동입니까?

btw, 전 PHP 5.3.3-7을 실행 중이지만 지금은 다른 버전에서 테스트 할 수 없습니다.

답변

2

isset()은 변수가 설정되지 않은 경우 이거나 변수가NULL과 같으면 false를 반환합니다. 이 경우 $arr[0]은 명시 적으로 NULL으로 설정됩니다. 이것은 실제적으로 의미가 다르므로 변수는 여전히 설정되어 있습니다. 단지 빈 값으로 설정됩니다.

요약하면 의도 한대로 작동합니다. 약간 다른 일을하는 여러 기능의 불행한 부작용입니다. 당신이 count()에 의해 반환되는 값에서 예상대로 실제로,뿐만 아니라 0 => NULL 키/값 쌍을 반환이 배열에 foreach를 사용하여 (!) 참고로

.

+0

빠른 응답을 주셔서 감사합니다. 그래서, 삼항 연산자를 사용할 때이 동작을 피할 수있는 방법이 있습니까? 아니면이 경우 긴 if() {} 문을 사용해야합니까? –

+0

@FlorianKernler : 실제로 설정을 해제하려면'unset()'을 호출해야합니다. 배열의 요소를 NULL로 설정하는 것이 유효한 선택이며 자주 사용되기 때문입니다. –

+0

사실 내가 삼항 연산자를 사용하는 동안 "비어 있으면 설정하지 마십시오"와 같은 것을 찾고있었습니다. 변수를 먼저 설정 한 다음 설정을 해제하면 나에게 효율적으로 들리지 않습니다. –