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

时间:2011-05-11 15:28:05

标签: php arrays initialization

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

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

8 个答案:

答案 0 :(得分:187)

$myArray = []; 

创建空数组。

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

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

此时,$ myArray包含“tree”,“house”和“dog”。上述每个命令都附加到数组,保留已存在的项目。

来自其他语言,这种附加到阵列的方式对我来说似乎很奇怪。我希望必须做一些像$ myArray + =“dog”之类的东西......或者像Visual Basic集合那样的“add()”方法。但是这种直接附加语法肯定是简短而方便的。

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

unset($myArray[1]); 

...会从数组中删除“house”(数组从零开始)。

unset($myArray); 

...会破坏整个阵列。

要清楚,用于附加到数组的空方括号语法只是告诉PHP自动为每个值分配索引,而不是为您分配索引。在幕后,PHP实际上是这样做的:

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

如果需要,您可以自己分配索引,并且可以使用任何所需的数字。您还可以为某些项目而不是其他项目分配索引编号。如果你这样做,PHP将填写缺失的索引号,从分配的最大索引号开始递增。

所以,如果你这样做:

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

...项目“dog”将被赋予索引号21. PHP不会为增量索引分配进行智能模式匹配,因此它不会知道您可能希望它指定索引为30为了“狗”。您可以使用其他函数指定数组的增量模式。我不会在这里讨论它,但它在PHP文档中都是如此。

干杯,

- =卡梅伦

答案 1 :(得分:172)

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

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

// 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时,我实际上错误地尝试使用[]初始化数组。

该语言的change最初被提出并被拒绝,原因是核心开发人员多数投反对票,原因如下:

  

此修补程序将不被接受,因为绝大多数核心开发人员投票反对。虽然如果你在核心开发者和用户之间采取累积平均值,但投票似乎表明相反,提交补丁是不负责任的,从长远来看,不支持或维护补丁。

然而,看起来心脏的变化导致5.4,可能受到对MongoDB(使用ECMAScript语法)等流行数据库的支持实现的影响。

答案 2 :(得分:52)

PHP 5.4之前:

$myArray = array();

PHP 5.4及更高版本

$myArray = [];

答案 3 :(得分:26)

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

答案 4 :(得分:18)

你正在做的是100%正确。

就良好的命名而言,通常会在私有/受保护的属性之前加上下划线,以明确它们不公开。例如。 private $_arr = array()public $arr = array()

答案 5 :(得分:5)

试试这个:

    $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }

答案 6 :(得分:5)

初始化一个简单的数组:

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

在数组中初始化数组:

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

来源:Sorce for the code

答案 7 :(得分:4)

别的方式,所以这是最好的。

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