哪种形式适当?

时间:2009-04-21 12:39:48

标签: php

PHP。

$a['0']=1;
$a[0]=2;

哪种形式适当?

6 个答案:

答案 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”的键 在第二个示例中,您在数组中的第一个元素上设置值。

不要意外混淆;)