> 백엔드 개발 > PHP 문제 > PHP에서 연관 배열의 첨자는 빈 문자열이나 숫자 유형이 될 수 없나요?

PHP에서 연관 배열의 첨자는 빈 문자열이나 숫자 유형이 될 수 없나요?

PHPz
풀어 주다: 2023-04-23 13:55:36
원래의
617명이 탐색했습니다.

PHP에서 배열은 동일한 데이터 유형의 여러 값을 저장할 수 있고 다른 인덱스를 사용하여 이러한 값에 액세스할 수 있는 매우 중요한 데이터 유형입니다. 그중 연관배열(Associative Array)은 특히 일반적으로 사용되는 배열 유형으로, 문자열을 키 이름으로 사용하여 배열의 값을 저장하고 액세스합니다. 그러나 연관 배열을 사용할 때 매우 중요한 점에 주의해야 합니다. 배열의 첨자는 빈 문자열이나 숫자 유형이 될 수 없습니다.

연관 배열의 첨자는 문자열로 식별되며 이 문자열에는 특정 요구 사항이 있습니다. 첫째, 고유해야 하고 반복할 수 없으며 둘째, 문자열 유형이어야 합니다. 빈 문자열이나 숫자 유형을 배열 첨자로 사용하면 프로그램 실행 시 오류가 발생하거나 예상치 못한 결과가 반환됩니다.

질문 1: 배열의 첨자는 빈 문자열입니다

상상해 보세요. 빈 문자열을 배열의 첨자로 사용하면 어떻게 될까요? 시도해 봅시다:

$arr = array(
    '' => 'empty_key',
    'test' => 'test_value'
);

echo $arr['']; // 输出:empty_key
로그인 후 복사

빈 문자열을 배열의 첨자로 성공적으로 정의했고, 이 첨자를 통해 해당 값에 액세스할 수 있음을 알 수 있습니다. 그렇다면 문제는 무엇입니까?

빈 문자열을 배열의 첨자로 사용하면 실제로는 정수형의 0으로 변환됩니다. 이는 PHP에서는 빈 문자열을 0으로 처리하고 이를 정수 유형으로 변환해야 할 때 결과가 0이 되기 때문입니다. 따라서 빈 문자열을 배열 첨자로 사용하는 것은 실제로 정수 0을 첨자로 사용하는 것과 동일하므로 이상한 동작이 발생할 수 있습니다.

예를 들어 for 루프를 사용하여 이 연관 배열을 탐색할 수 있습니다.

$arr = array(
    '' => 'empty_key',
    'test' => 'test_value'
);

for($i=0; $i<count($arr); $i++){
    echo $arr[$i]."\n";
}
로그인 후 복사

우리가 얻고자 하는 결과는 다음과 같습니다.

empty_key
test_value
로그인 후 복사

그러나 실제로 프로그램은 경고와 출력을 표시합니다.

PHP Notice:  Undefined offset: 1
empty_key
로그인 후 복사

The 경고 메시지는 배열 인덱스 1의 요소가 정의되지 않았음을 알려줍니다. 이는 카운터 변수 $i를 사용하여 배열을 순회할 때 $i의 초기 값이 0이므로 문자열 유형 ''으로 변환되므로 배열 인덱스 ''로 요소에 액세스하기 때문입니다. 이 요소를 순회하면 $i의 값이 1씩 증가하여 1이 되지만 이 1은 정수형 1로 변환되며 이 배열에는 첨자 1이 붙은 요소가 실제로 존재하지 않으므로 프로그램에서 경고하고 출력합니다. 빈 문자열.

질문 2: 배열 첨자는 숫자 유형입니다.

빈 문자열과 마찬가지로 숫자 유형을 배열 첨자로 사용하는 것도 피해야 합니다. 상상해 보세요. 숫자 유형을 배열의 첨자로 사용하면 어떻게 될까요? 시도해 보세요:

$arr = array(
    1 => 'one',
    2 => 'two',
    3 => 'three'
);

echo $arr[1]; // 输出:one
로그인 후 복사

숫자 1, 2, 3을 배열의 첨자로 성공적으로 정의했으며 해당 값은 이러한 첨자를 통해 액세스할 수 있음을 알 수 있습니다. 그렇다면 문제는 무엇입니까?

숫자 유형을 배열의 첨자로 사용하면 숫자가 자동으로 정수 유형으로 변환됩니다. 이는 문제가 없는 것처럼 보이지만 실제로는 몇 가지 숨겨진 문제가 발생할 수 있습니다.

예를 들어 foreach 루프를 사용하여 이 연관 배열을 탐색할 수 있습니다.

$arr = array(
    1 => 'one',
    2 => 'two',
    3 => 'three'
);

foreach($arr as $key => $value){
    echo $key.' => '.$value."\n";
}
로그인 후 복사

우리가 얻고자 하는 결과는 다음과 같습니다.

1 => one
2 => two
3 => three
로그인 후 복사

그러나 실제로 프로그램은 다음을 출력합니다.

0 => one
1 => two
2 => three
로그인 후 복사

보시다시피, 프로그램의 결과 출력이 우리와 동일합니다. 원하는 결과가 충족되지 않았습니다. 이는 foreach 루프에서 PHP가 숫자 크기에 따라 배열의 첨자를 정렬하고 자동으로 정수 유형으로 변환하기 때문입니다. 이 예제에서는 1, 2, 3의 세 가지 숫자 유형 첨자를 정의했으므로 자동으로 정수 유형 1, 2, 3으로 변환된 후 크기 순서로 정렬됩니다. 따라서 프로그램에서 $key의 값은 각각 0, 1, 2로 우리가 정의한 첨자와 완전히 일치하지 않습니다. 이로 인해 프로그램이 배열을 처리할 때 문제가 발생할 수 있습니다.

해결책

데이터가 기대에 미치지 못하는 상황을 방지하려면 연관 배열에서 빈 문자열이나 숫자 유형을 첨자로 사용하지 않아야 합니다. 숫자 첨자를 사용해야 하는 경우 사용하기 전에 문자열 유형으로 변환하면 위의 문제를 피할 수 있습니다.

예를 들어 숫자 유형을 정의하는 첨자를 따옴표로 묶어 문자열 유형으로 변환할 수 있습니다.

$arr = array(
    '1' => 'one',
    '2' => 'two',
    '3' => 'three'
);
로그인 후 복사

이런 방식으로 숫자 유형의 첨자를 안전하게 사용할 수 있습니다. 그러나 이 방법을 사용할 때는 유형에 관계없이 모든 첨자가 고유한지 확인해야 한다는 점에 유의해야 합니다. 이런 방식으로만 프로그램이 정상적으로 실행되고 데이터가 기대치를 충족하는지 확인할 수 있습니다.

요약

PHP에서 연관 배열은 매우 일반적으로 사용되는 데이터 유형입니다. 이는 대량의 데이터를 저장하고 키-값 쌍을 사용하여 이 데이터에 액세스할 수 있습니다. 그러나 중요한 문제에 주의를 기울여야 합니다. 배열의 첨자는 빈 문자열이나 숫자 유형이 될 수 없습니다. 실수로 이러한 유형의 첨자를 사용하면 프로그램 실행 시 오류가 발생하거나 예상치 못한 결과가 반환될 수 있습니다. 따라서 연관 배열을 사용할 때는 항상 이 문제에 주의를 기울이고 이러한 문제가 발생하지 않도록 적절한 조치를 취해야 합니다.

위 내용은 PHP에서 연관 배열의 첨자는 빈 문자열이나 숫자 유형이 될 수 없나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿