下面的三个数组是相同的,还是可以区分开来?如果有,怎么做?
$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"