非关联数组与键为字符串整数的关联数组之间的区别


Difference between a non-associated array and an associated array where the keys are string intergers

下面的三个数组是相同的,还是可以区分开来?如果有,怎么做?

$array1=array('abc','def','ghi');
$array2=array('0'=>'abc','1'=>'def','2'=>'ghi');
$array3=array(0=>'abc',1=>'def',2=>'ghi');

一个简单的测试就可以避免这种混淆。

<?php
$array1=array('abc','def','ghi');
$array2=array('0'=>'abc','1'=>'def','2'=>'ghi');
$array3=array(0=>'abc',1=>'def',2=>'ghi');
print_r($array1);
print_r($array2);
print_r($array3);

Array
(
    [0] => abc
    [1] => def
    [2] => ghi
)
Array
(
    [0] => abc
    [1] => def
    [2] => ghi
)
Array
(
    [0] => abc
    [1] => def
    [2] => ghi
)

你觉得有什么不同吗?一点儿也没有呢。

下面的三个数组是相同的,还是可以区分开来?

是的,它们是相同的,不,它们是不能区分的。

注意这个例子来自PHP.net
<?php
$array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array);
?> 

读这

由于上面示例中的所有键都被强制转换为1,因此每个新元素的值将被覆盖,最后赋值"d"是唯一剩下的值。

这意味着你的0"0"的意思是一样的,结束:)

在我看来,它们在数据和功能上都是一样的:

<?php
$array1=array('abc','def','ghi');
$array2=array('0'=>'abc','1'=>'def','2'=>'ghi');
$array3=array(0=>'abc',1=>'def',2=>'ghi');
var_dump($array1); // array(3) { [0]=> string(3) "abc" [1]=> string(3) "def" [2]=> string(3) "ghi" } 
var_dump($array2); // array(3) { [0]=> string(3) "abc" [1]=> string(3) "def" [2]=> string(3) "ghi" } 
var_dump($array3); // array(3) { [0]=> string(3) "abc" [1]=> string(3) "def" [2]=> string(3) "ghi" }
echo $array1[0]; // abc
echo $array1['0']; // abc
echo $array2[0]; // abc
echo $array2['0']; // abc
echo $array3[0]; // abc
echo $array3['0']; // abc
array_push($array2, 'jik');
var_dump($array2); // array(4) { [0]=> string(3) "abc" [1]=> string(3) "def" [2]=> string(3) "ghi" [3]=> string(3) "jik" }
?>

它们不相同,因为您可以通过$array1[0]调用第一个,并将输出"abc"。第二个键不能在引号中,否则它会认为它是一个字符串。$array2["0"]将输出"abc",$array[0]也将输出。第三个与第一个相同,因为提供的键没有引号。$array[3]将输出"abc"