현재 위치: > 최신 기사 목록> Array_key_Exists가 배열 요소의 값이 NULL인지 확인하지 않는 이유는 무엇입니까?

Array_key_Exists가 배열 요소의 값이 NULL인지 확인하지 않는 이유는 무엇입니까?

gitbox 2025-05-28

배열 작업에 PHP를 사용하는 경우 많은 개발자가 기능 array_key_exists () 에 의해 혼동됩니다. 특히 키 값이 NULL 일 때 여전히 사실이 반환됩니다. 이에 대한 이유는 실제로 PHP 배열의 작동 메커니즘과 밀접한 관련이 있습니다.

array_key_exists ()의 역할

array_key_exists () 의 함수는 키에 값이 있는지 여부를 감지하지 않고 지정된 키가 배열에 존재하는지 여부를 감지하는 것입니다. 이는이 키가 배열에 존재하는 한 해당 값이 무엇이든 ( 이라도) 함수가 true를 반환한다는 것을 의미합니다.

 $array = ['name' => null];

if (array_key_exists('name', $array)) {
    echo '열쇠가 존재합니다';
} else {
    echo '키는 존재하지 않습니다';
}

위의 코드의 출력은 다음과 같습니다.

 열쇠가 존재합니다

값은 이지만 키 '이름'이 배열에 존재하기 때문입니다.

isset ()와의 비교

많은 초보자는 array_key_exists ()isset () 을 혼동하고 값이 무일하게 있을 때 동작이 다릅니다.

 $array = ['name' => null];

var_dump(isset($array['name']));            // 산출: bool(false)
var_dump(array_key_exists('name', $array)); // 산출: bool(true)

ISSET () 변수가 설정되어 있고 null이 설정되어 있는지 확인합니다. 따라서 키의 값이 null 이면 isset ()는 false를 반환하고 array_key_exists ()는 값에 관계없이 키가 존재하는지 여부에 대해서만 관심을 갖습니다.

실제 응용 시나리오

이 동작의 차이는 양식 데이터가 처리되는 시나리오, API 요청 또는 "키가 존재하지 않는다"와 "키가 존재하지만 값이 비어있다"는 시나리오에서 매우 중요합니다. 예를 들어:

 // 시뮬레이션 JSON 요청 본문
$json = '{"username": null}';
$data = json_decode($json, true);

// 사용자가 명시 적으로 제출되는 경우 null 값,array_key_exists 식별 할 수 있습니다
if (array_key_exists('username', $data)) {
    // 거래하십시오 username,哪怕값为 null
} else {
    // username 필드 제출되지 않았습니다
}

이 사용 사례에서 ISSET ()을 사용하여 사용자 이름이 존재하는지 여부를 감지하면 사용자가 의도적으로 널 값 으로 전달되었는지 여부를 알지 못하며 일부 논리적 판단에서 모호성이 발생합니다.

오류 예 : ISSET을 사용하여 키의 존재를 결정합니다.

구성 배열이 있다고 가정합니다.

 $config = ['debug' => null];

if (isset($config['debug'])) {
    echo '디버그 모드를 켭니다';
}

이 판단은 값이 이면 isset ()가 거짓을 반환하기 때문에 실패하지만 실제로이 키가 존재하는지 알고 싶을 수도 있습니다. 보다 정확한 접근 방식은 다음과 같습니다.

 if (array_key_exists('debug', $config)) {
    echo '디버그 모드를 켭니다';
}

더 안전한 판단 논리

키가 존재하는지 여부를 알고 싶고 값의 내용을 처리하려면 다음과 함께 사용할 수 있습니다.

 if (array_key_exists('token', $data)) {
    if ($data['token'] !== null) {
        // 효율적인 token
        $token = $data['token'];
    } else {
        // token 예 null,재검토 또는 프롬프트 오류가 필요할 수 있습니다
    }
} else {
    // token 필드는 전혀 전달되지 않습니다,可能예非法请求
}

요약

array_key_exists () 의 동작은 매우 합리적으로 설계되었습니다. 값 상태가 아니라 키의 존재에 중점을 둡니다. 이것은 강력한 PHP 프로그램을 작성하는 데 필수적입니다.

디버깅 중에 배열에 키가 실제로 존재하는지 여부를 추가로 확인 해야하는 경우 값이 NULL 이더라도 Array_Key_Exists ()를 사용하는 것이 올바른 선택입니다. 오용 isset ()을 피하기 위해 키의 존재를 결정하려면 널로 명시 으로 설정된 주요 값을 무시할 수 있습니다. 이는 복잡한 비즈니스 로직 (예 : gitbox.net 의 API 디자인)을 다룰 때 오류가 발생하기 쉬운 주요 값을 무시할 수 있습니다.