PHP 배열 Key 강제 형식 변환 실현 원리 분석

2793 단어 PHPKey유형바꾸다
PHP 는 자바 스 크 립 트 처럼 변 수 를 정의 할 때 변 수 를 강제로 지정 할 필요 가 없 는 약 한 유형의 언어 입 니 다.또한 PHP 는 강력 한 배열 기능 을 가지 고 있 습 니 다.배열 의 Key 는 일반적인 숫자 형식 으로 표시 할 수도 있 고 문자열 형식의 Hash 키 일 수도 있 습 니 다.그러면 배열 의 Key 가 문자열 과 숫자 를 동시에 가지 고 있 을 때 어떤 상황 이 발생 합 니까?
먼저 다음 코드 를 살 펴 보 겠 습 니 다.

$arr = [
  "1" => "a",
  "01" => "b",
  1 => "aa",
  1.1 => "aaa",
  "0.1" => "bb",
];

var_dump($arr);

// array(3) {
//   [1] =>
//   string(3) "aaa"
//   '01' =>
//   string(1) "b"
//   '0.1' =>
//   string(2) "bb"
// }
어?우리 가 정의 한"1",1 아래 표 시 된 값 은 모두 1.1 의"aa"가 되 었 습 니까?
맞습니다.PHP 의 배열 Key 값 은 숫자 와 문자열 형식 만 받 아들 이 며,Key 가 문자열 일 때 숫자 형식 으로 강제로 변환 되 며,형식 강제 변환 규칙 을 준수 합 니 다.부동 소수점 도 마찬가지 로 아래 에서 정 리 된 정형 으로 직접 바 뀌 었 다.
그럼'0.1'과'01'은 왜 아직도 있 습 니까?우선,"01"은 표준 10 진수 가 아니 라 정형 으로 변환 할 수 없 기 때문에"01"입 니까?아니면 문자열 아래 에 표 시 됩 니까?"0.1"입 니까?그것 은 물론 표준 10 진법 수치 도 아니다.여 기 는 문자열 변환 숫자의 강제 형식 변환 원칙 에 위배 되 는 것 입 니 다.변수의 강제 변환 에서 이 두 문자열 은 모두 0 으로 바 뀌 지만 배열 에 서 는 그렇지 않 습 니 다.여 기 는 구덩이 일 수도 있 고 주의해 야 할 부분 입 니 다.
PHP 공식 문서 에 제 시 된 Key 값 변환 설명 은 다음 과 같 습 니 다.
4.567917.합 법 적 인 정형 값 을 포함 하 는 문자열 은 정형 으로 변 환 됩 니 다.예 를 들 어 키 이름'8'은 실제 8 로 저 장 됩 니 다.그러나'08'은 합 법 적 인 십 진법 수치 가 아니 기 때문에 강제로 전환 하지 않 는 다
  • 부동 소수점 도 정형 으로 바 뀌 는데 그 소수 부분 이 버 려 진 다 는 것 을 의미한다.예 를 들 어 키 이름 8.7 은 실제 8 로 저 장 됩 니 다
  • 불 값 도 정형 으로 바뀐다.즉,키 이름 true 는 실제 1 로 저장 되 고 키 이름 false 는 0 으로 저 장 됩 니 다
  • Null 은 빈 문자열 로 변 환 됩 니 다.즉,키 이름 null 은 실제""로 저 장 됩 니 다
  • 4.567917.배열 과 대상 은 키 이름 으로 사용 할 수 없습니다.계속 이렇게 하면 경고:Illegal offset type..다음은 필자 가 했 던 면접 문제 로 이 유형의 전환 과 매우 큰 관 계 를 가진다.코드 는 다음 과 같다.
    
    a   = ['a'];
    $a[2]  = 'b';
    $a[]  = 'c';
    $a['1'] = 'd';
    
    //           ?
    foreach ($a as $v) {
    	echo $v, ',';
    }
    
    //           ?
    for ($i = 0; $i < count($a); ++$i) {
    	echo $a[$i], ' ,';
    }
    여러분,먼저 실행 하지 마 세 요.코드 를 직접 보고 이 두 코드 의 출력 결과 가 무엇 인지 알 수 있 는 지 확인 한 다음 에 실행 하 세 요.결과 가 당신 이 생각 하 는 것 과 같 는 지 확인 하 세 요.
    테스트 코드:  https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/PHP 배열 Key 에 대한 강제 변환.php
    참고 자료:  https://www.php.net/manual/zh/language.types.array.php
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기