2016-06-10 2 views
0
내 쉘에있어

보여줍니다 (우분투 12) 내가 설명 할 수없는 이상한 행동 발생했습니다위해서 var_dump 예기치 않은 결과

위해서 var_dump (배열 (=> "A"1.5, 2.2 => "b", 2.5 => "c"));

array(2) { 
    [1]=> 
    string(1) "a" 
    [2]=> 
    string(1) "c" 
} 

누군가가 이것을 설명하십시오 수 있습니다

은 내 쉘에서 다음과 같은 인쇄? "b"는 어떻게됩니까? 인쇄되지 않는 이유는 무엇입니까? (PHP 5.3)

+0

매뉴얼이 수를 클릭하십시오. 예 : 키 8.7은 실제로 8 *] (http://php.net/manual/en/language.types.array.php)에 저장됩니다. – Rizier123

+0

'2.2'는 2로 간주됩니다. '2.5'는 이 경우 두 값이 모두 2이므로 '2.5'는 '2.2'를 무시합니다. –

답변

6

두 가지 일이 일어나고 :

  1. 배열의 키는 문자열이나 정수가 될 수 있습니다. 부동 소수점은 정수로 변환됩니다.
  2. 배열 선언의 여러 요소가 동일한 키를 사용하면 다른 요소는 모두 덮어 써지기 때문에 마지막 요소 만 사용됩니다.

그래서 2.22.5 키는 정수 2으로 캐스팅되었다. 두 번째 것은 첫 번째 것을 덮어 씁니다.

http://php.net/manual/en/language.types.array.php#example-99


하나의 옵션은 문자열 키를 사용하는 것입니다 :

var_dump(array("1.5" => "a", "2.2" => "b", "2.5" => "c")); 

array(3) { 
    '1.5' => 
    string(1) "a" 
    '2.2' => 
    string(1) "b" 
    '2.5' => 
    string(1) "c" 
} 
0

유형 주조 및 덮어 쓰기 예를

<?php 
$array = array(
    1 => "a", 
    2.2 => "b", 
    2.5 => "c", 
); 
var_dump($array); 
?> 

위 예제 출력 : 위의 예 2.2 & 2.52으로 캐스팅되어 마찬가지로

array(2) { 
    [1]=> 
    string(1) "a" 
    [2]=> 
    string(1) "c" 
} 

, 값은 모든 새로운 요소와 마지막으로 할당 된 값 "C"에 overwritten 것은 남아있는 유일한 사람입니다. [* 수레도 분수 부분이 잘 리게됩니다 즉, 정수로 캐스팅됩니다

더 많은 정보 Type Casting and Overwriting example