在某些其他语言(例如AS3)中,已经注意到,由于对象创建和实例化的原因,如果像这样var foo = []而不是var foo = new Array()来初始化一个新数组会更快。我想知道在PHP中是否有类似的东西?
var foo = []
var foo = new Array()
class Foo { private $arr = array(); // is there another / better way? }
在PHP中数组就是数组;这里没有对原语和对象的考虑,因此没有可比的优化。
你所做的是100%正确的。
在良好的命名方面,通常会在私有/受保护属性之前加一个下划线,以明显表明它们不是公共的。例如:private $_arr = array()或public $arr = array()
private $_arr = array()
public $arr = array()
有no other way,所以这是最好的。
编辑:这个答案在PHP 5.4及更高版本后无效。
在ECMAScript实现(例如,ActionScript或JavaScript)中,Array()是一个构造函数,而[]是数组文字语法的一部分。两者都以完全不同的方式进行优化和执行,文字语法没有调用函数的开销。
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时,我实际上犯了一个错误,试图使用[]初始化数组。
该语言的改变最初被提出并被核心开发人员否决,原因如下:
这个补丁将不会被接受,因为有微弱多数的核心开发者投了反对票。但如果你计算核心开发者和用户投票的累积平均值,结果似乎正好相反,那么提交一个长期不受支持或维护的补丁是不负责任的。
然而,在5.4版本之前似乎有了改变,可能是受到了对流行数据库(如MongoDB(使用ECMAScript语法))的支持实现的影响。
试试这个:
$arr = (array) null; var_dump($arr); // will print // array(0) { }
初始化一个简单数组:
<?php $array1=array(10,20,30,40,50); ?>
在array中初始化array:
<?php $array2=array(6,"santosh","rahul",array("x","y","z")); ?>
来源:查找代码
$myArray = [];
创建空数组。
你可以稍后将值推入数组,如下所示:
$myArray[] = "tree"; $myArray[] = "house"; $myArray[] = "dog";
此时,$myArray包含“树”,“房子”和“狗”。上面的每个命令都附加到数组中,保留已经存在的项。
由于来自其他语言,这种添加数组的方式对我来说似乎很奇怪。我期望必须做一些像$myArray += "dog"之类的事情…或者像Visual Basic集合那样的"add()"方法。但是这种直接附加语法当然是简短和方便的。
你实际上必须使用unset()函数来删除项:
unset($myArray[1]);
... 将从数组中删除“house”(数组是从零开始的)。
unset($myArray);
... 会摧毁整个阵列。
需要明确的是,添加到数组的空方括号语法只是告诉PHP自动为每个值分配索引的一种方式,而不是YOU分配索引。实际上,PHP是这样做的:
$myArray[0] = "tree"; $myArray[1] = "house"; $myArray[2] = "dog";
如果您愿意,您可以自己分配索引,您可以使用任何您想要的数字。您还可以为某些项目分配索引号,而不是其他项目。如果这样做,PHP将填充缺少的索引号,从分配的最大索引号开始递增。
如果你这样做:
$myArray[10] = "tree"; $myArray[20] = "house"; $myArray[] = "dog";
... “狗”一项的索引编号为21。PHP不为增量索引分配做智能模式匹配,因此它不会知道您可能希望它为“dog”分配索引为30。可以使用其他函数为数组指定增量模式。我不会在这里详细介绍,但都在PHP文档中。
欢呼,
卡梅隆- =
在PHP 5.4之前:
$myArray = array();
PHP 5.4及以上版本
执行不这样做:
$arrTst = array( 'IdxKeyOne' => null, 'IdxKeyTwo' => null, 'IdxKeyThr' => null );
没有所谓的“初始化”;带有虚拟/占位符值的数组索引键。print_r给:
Array ( [IdxKeyOne] => [IdxKeyTwo] => [IdxKeyThr] => )
元素存在的地方,有定义的键但值为空。在以后使用该数组时,无论如何都必须删除假行。