在PHP中初始化(空)数组的最佳方法

在某些其他语言(例如AS3)中,已经注意到,如果像这样做var foo = []而不是var foo = new Array() ,则由于对象创build和实例化的原因,初始化新数组会更快。 我不知道在PHP中是否有任何等价的东西?

 class Foo { private $arr = array(); // is there another / better way? } 

在ECMAScript实现(例如,ActionScript或JavaScript)中, Array()是一个构造函数, []是数组文字语法的一部分。 两者都是以完全不同的方式进行优化和执行的,字面语法不会被调用函数的开销所困扰。

另一方面,PHP的语言结构可能看起来像函数,但不被视为这样。 即使使用支持[]作为替代的PHP 5.4,开销也没有区别,因为就编译器/parsing器而言,它们完全是同义词。

 // Before 5.4, you could only write $array = array( "foo" => "bar", "bar" => "foo", ); // As of PHP 5.4, the following is synonymous with the above $array = [ "foo" => "bar", "bar" => "foo", ]; 

如果您需要支持较早版本的PHP,请使用前一种语法。 也有一个可读性的论点,但作为一个长期的JS开发人员,后者似乎相当自然。 当我第一次学习PHP时,我实际上犯了一个错误,试图用[]初始化数组。

这种对语言的改变最初是由于核心开发者反对多数票而提出和拒绝的,原因如下:

这个补丁不会被接受,因为大多数核心开发者投票反对。 尽pipe如果你在核心开发者和用户地之间取得了一个累积的平均数,似乎表明了相反的情况,那么从长远来看,提交一个不被支持或维护的补丁将是不负责任的。

然而,看起来5.4版本的内核发生了变化,可能受到对MongoDB(使用ECMAScript语法)等stream行数据库的支持的实现的影响。

 $myArray = []; 

创build空数组。

您可以稍后将值推入到数组中,如下所示:

 $myArray[] = "tree"; $myArray[] = "house"; $myArray[] = "dog"; 

在这一点上,$ myArray包含“树”,“房子”和“狗”。 上述每个命令附加到数组,保留已经存在的项目。

来自其他语言,这种附加到数组的方式对我来说似乎很陌生。 我希望不得不做一些像$ myArray + =“dog”之类的东西,或者像Visual Basic集合那样的“add()”方法。 但是这个直接的附加语法一定是简单而方便的。

你实际上必须使用unset()函数来删除项目:

 unset($myArray[1]); 

…将从数组中删除“房子”(数组是从零开始的)。

 unset($myArray); 

…会破坏整个arrays。

清楚的是,用于附加到数组的空方括号语法只是一种告诉PHP自动将索引分配给每个值的方法,而不是指定索引。 在封面下,PHP实际上是这样做的:

 $myArray[0] = "tree"; $myArray[1] = "house"; $myArray[2] = "dog"; 

你可以自己分配索引,你可以使用任何你想要的数字。 您也可以将索引号分配给某些项目,而不是其他项目。 如果你这样做,PHP会填写缺less的索引号,从最大的索引号增加。

所以,如果你这样做:

 $myArray[10] = "tree"; $myArray[20] = "house"; $myArray[] = "dog"; 

…项目“狗”将被赋予一个21的索引号.PHP不为增量索引分配做智能模式匹配,所以它不会知道你可能想要它分配一个30指数“狗”。 您可以使用其他函数来指定数组的增量模式。 我不会在这里进入,但它的全部在PHP文档中。

干杯,

– =卡梅伦

在PHP中,数组是一个数组; 没有原始对象的考虑,所以没有可比较的优化。

在PHP 5.4之前:

 $myArray = array(); 

PHP 5.4和更高

 $myArray = []; 

你在做什么是100%正确的。

就好命名而言,通常情况下,私有/受保护的属性前面加上下划线,以使其明显不公开。 例如private $_arr = array()public $arr = array()

没有别的办法 ,所以这是最好的。

编辑:自PHP 5.4及更高版本以来,此答案无效。

初始化一个简单的数组:

 <?php $array1=array(10,20,30,40,50); ?> 

初始化数组中的数组:

 <?php $array2=array(6,"santosh","rahul",array("x","y","z")); ?> 

来源: Sorce的代码

尝试这个:

  $arr = (array) null; var_dump($arr); // will print // array(0) { }