8

考虑这个例子

<?php
    $test = array("00"=>"A","B","C","D","E");
    print_r($test);
    echo "<br>";

    echo $test[0];
    echo "<br>";
    echo $test["0"];
    echo "<br>";

    echo $test["00"];
    echo "<br>";
    echo $test[00];
?>

输出

数组( [00] => A [0] => B [1] => C [2] => D [3] => E )

一个

Q1。为什么与而$test[0]相同,$test["0"]$test[00]与不同$test["00"]

Q2。如果Q1的答案是因为在00 = 0数字上,那么为什么这个数组有一个索引 as00和另一个 as 0

Q3。如果您无法访问$test["00"]$test[0]那么您如何知道哪个索引是数字,哪个是字符串?如果两者都只是数字

编辑

根据目前的答案,我心中还有另一个问题。这里是问题 4。

Q4。为什么是if(00==0)真假if(07==7)?(对于数组索引)

Q5。

$test = array("00"=>"A","0"=>"B","000"=>"C","0000"=>"D","00000"=>"E");
 echo $test[0];

为什么输出是B,不应该是A吗?因为这是数组中的第一个元素,在第 0 个位置

4

3 回答 3

5

根据文档,“将发生的 […]关键转换”​​之一是:

包含有效整数s 的字符串s将被强制转换为整数类型。例如,键“8”实际上将存储在8下。另一方面,不会强制转换“08” ,因为它不是有效的十进制整数。

[链接]

于 2013-05-30T05:52:50.057 回答
2

Q1。因为 00 = 0 在数字上

Q2。因为索引"00"00

尝试:

$test=array(00=>"A","B","C","D","E");
print_r($test);

/*
Array
(
    [0] => A
    [1] => B
    [2] => C
    [3] => D
    [4] => E
)
*/

Q3。

echo gettype("00");
# string
echo gettype(00);
# integer
echo gettype("0");
# string
echo gettype(0);
# integer

从手册: http: //php.net/manual/en/language.types.array.php

包含有效整数的字符串将被转换为整数类型。例如,键“8”实际上将存储在 8 下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。

评论后编辑

Q4。我认为OP的问题本质上是为什么第二个和第四个行为不同:

php > var_dump("00" === 0);
bool(false)
php > var_dump(00 === 0);
bool(true)
php > var_dump("08" === 8);
bool(false)
php > var_dump(08 === 8);
bool(false)

我还没有答案。

于 2013-05-30T05:47:18.040 回答
-1
"anystring" == 0; //true
"0000" == 0;      //true

"0" == 0;      //true
于 2013-05-30T05:52:16.917 回答