PHP。
$a['0']=1;
$a[0]=2;
哪种形式适当?
答案 0 :(得分:8)
在第一个示例中,您使用字符串索引数组,该数组将是“引擎盖下”的哈希表,速度较慢。要访问该值,将从字符串计算“数字”以定位您存储的值。这种计算需要时间。
第二个例子是基于数字的数组,它更快。使用数字的数组将根据该数字索引数组。 0是索引0; 1是索引1.这是访问数组的一种非常有效的方法。不需要复杂的计算。索引只是从数组开头到访问值的偏移量。
如果你只使用数字,那么你应该使用数字,而不是字符串。这不是形式问题,而是PHP如何优化代码的问题。数字更快。
然而,当处理小尺寸(存储少于<10,000个元素的阵列;感谢Paolo;)时,速度差异可以忽略不计。
答案 1 :(得分:4)
在第一个你有一个数组项: 关键:0 指数:0
在第二个示例中,您只有一个索引集。 指数:0
$arr = array();
$arr['Hello'] = 'World';
$arr['YoYo'] = 'Whazzap';
$arr[2] = 'No key'; // Index 2
答案 2 :(得分:4)
“有趣”的是,你会得到完全相同的结果。 PHP(无论出于何种原因)测试用作数组索引的字符串是否仅包含数字。如果是,则将字符串转换为int或double。
<?php $x=array(); $x['0'] = 'foo'; var_dump($x); $x=array(); $x[0] = 'foo'; var_dump($x);
对于两个阵列,你得到[0] =&gt; foo,而不是[“0”] =&gt; FOO。
或其他测试:
<?php $x = array(); $x[0] = 'a'; $x['1'] = 'b'; $x['01'] = 'c'; $x['foo'] = 'd';foreach( $x as $k=>$v ) { echo $k, ' ', gettype($k), "\n"; }
0 integer 1 integer 01 string foo string
如果您仍然不相信它会查看zend_hash.h中的#define HANDLE_NUMERIC(key,length,func)以及使用它的时间和地点。
你觉得这很奇怪吗?选一个号码并排队......答案 3 :(得分:2)
如果您打算增加密钥,请使用第二个选项。第一个是关联数组,其中包含字符串“0”作为键。
答案 4 :(得分:1)
它们都是“合适的”但具有其他人所指出的不同副作用。
我要指出的另一件事是,如果您只是将项目推送到数组,您可能更喜欢这种语法:
$ a = array(); $ a [] = 1; $ a [] = 2; //现在$ a [0]为1,$ a [1]为2。
答案 5 :(得分:0)
他们都很好,他们都会工作。
不同之处在于,首先,将值1设置为名为“0”的键 在第二个示例中,您在数组中的第一个元素上设置值。
不要意外混淆;)