在某些其他语言中(例如AS3),我们注意到如果像var foo = []这样初始化一个新数组比var foo = new Array()更快,这是因为对象创建和示例化的原因。我想知道PHP中是否有任何等价物?
var foo = []
var foo = new Array()
class Foo { private $arr = array(); // is there another / better way? }
lawou6xi1#
$myArray = [];
创建空数组。您可以稍后将值推送到数组中,如下所示:
$myArray[] = "tree"; $myArray[] = "house"; $myArray[] = "dog";
此时,$myArray包含了"tree"、"house"和"dog"。上面的每个命令都会追加到数组中,保留已经存在的项。由于我来自其他语言,这种向数组追加的方式对我来说似乎很奇怪。我原以为必须执行类似$myArray +="dog"之类的操作......或者像Visual Basic集合那样使用"add()"方法。但这种直接追加语法确实很简短和方便。实际上,您必须使用unset()函数来删除项:
unset($myArray[1]);
...将从数组中删除"house"(数组从零开始)。
unset($myArray);
......会摧毁整个阵列。需要说明的是,用于追加数组的空方括号语法只是告诉PHP自动为每个值分配索引,而不是由您分配索引的一种方式。
$myArray[0] = "tree"; $myArray[1] = "house"; $myArray[2] = "dog";
如果你愿意,你可以自己分配索引,你可以使用任何你想要的数字。你也可以分配索引号给一些项目,而不是其他项目。如果你这样做,PHP将填补缺失的索引号,从最大的索引号递增,因为它去。如果你这么做:
$myArray[10] = "tree"; $myArray[20] = "house"; $myArray[] = "dog";
...项"dog"将被赋予索引号21。PHP不会为增量索引分配进行智能模式匹配,因此它不会知道您可能希望它为"dog"分配索引30。您可以使用其他函数来指定数组的增量模式。我不会在这里详细介绍,但在PHP文档中有详细说明。
qjp7pelc2#
在ECMAScript实现(例如ActionScript或JavaScript)中,Array()是构造函数,[]是数组文字语法的一部分。 两者都以完全不同的方式优化和执行,文字语法不会受到调用函数的开销的困扰。另一方面,PHP的语言结构可能看起来像函数,但却没有被当作函数来处理。 即使是PHP 5.4,它支持[]作为替代,开销也没有什么不同,因为就编译器/解析器而言,它们是完全同义的。
Array()
[]
// 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语法)等流行数据库的实现的影响。
xv8emn3q3#
PHP 5.4之前版本:
$myArray = array();
PHP 5.4及更高版本
e0bqpujr4#
在PHP中数组就是数组;没有图元对对象的考虑,因此没有可比较的优化。
e5nszbig5#
你所做的是100%正确的。在命名方面,私有/受保护的属性前面通常会加上下划线,以表明它们不是公共的。例如private $_arr = array()或public $arr = array()
private $_arr = array()
public $arr = array()
9rbhqvlz6#
初始化简单数组:
<?php $array1=array(10,20,30,40,50); ?>
正在初始化数组中的数组:
<?php $array2=array(6,"santosh","rahul",array("x","y","z")); ?>
来源:Sorce for the code
ykejflvf7#
没有其他办法了,所以这是最好的办法。编辑:此答案在PHP 5.4及更高版本之后无效。
7uzetpgm8#
试试这个:
$arr = (array) null; var_dump($arr); // will print // array(0) { }
sbdsn5lh9#
不要这样做:
$arrTst = array( 'IdxKeyOne' => null, 'IdxKeyTwo' => null, 'IdxKeyThr' => null );
没有用伪值/占位符值“初始化”数组的索引键这样的事情。print_r给出:
Array ( [IdxKeyOne] => [IdxKeyTwo] => [IdxKeyThr] => )
其中的元素存在,定义了键,但为空值。当以后使用数组时,无论如何都必须删除伪行。
9条答案
按热度按时间lawou6xi1#
创建空数组。
您可以稍后将值推送到数组中,如下所示:
此时,$myArray包含了"tree"、"house"和"dog"。上面的每个命令都会追加到数组中,保留已经存在的项。
由于我来自其他语言,这种向数组追加的方式对我来说似乎很奇怪。我原以为必须执行类似$myArray +="dog"之类的操作......或者像Visual Basic集合那样使用"add()"方法。但这种直接追加语法确实很简短和方便。
实际上,您必须使用unset()函数来删除项:
...将从数组中删除"house"(数组从零开始)。
......会摧毁整个阵列。
需要说明的是,用于追加数组的空方括号语法只是告诉PHP自动为每个值分配索引,而不是由您分配索引的一种方式。
如果你愿意,你可以自己分配索引,你可以使用任何你想要的数字。你也可以分配索引号给一些项目,而不是其他项目。如果你这样做,PHP将填补缺失的索引号,从最大的索引号递增,因为它去。
如果你这么做:
...项"dog"将被赋予索引号21。PHP不会为增量索引分配进行智能模式匹配,因此它不会知道您可能希望它为"dog"分配索引30。您可以使用其他函数来指定数组的增量模式。我不会在这里详细介绍,但在PHP文档中有详细说明。
qjp7pelc2#
在ECMAScript实现(例如ActionScript或JavaScript)中,
Array()
是构造函数,[]
是数组文字语法的一部分。 两者都以完全不同的方式优化和执行,文字语法不会受到调用函数的开销的困扰。另一方面,PHP的语言结构可能看起来像函数,但却没有被当作函数来处理。 即使是PHP 5.4,它支持
[]
作为替代,开销也没有什么不同,因为就编译器/解析器而言,它们是完全同义的。如果你需要支持旧版本的PHP,可以使用前一种语法。 这也是为了可读性,但是作为一个长期的JS开发者,后一种语法对我来说似乎是相当自然的。 实际上,当我第一次学习PHP时,我犯了一个错误,试图使用
[]
初始化数组。该语言的change最初被提议,但由于核心开发人员的多数投票反对而被拒绝,原因如下:
然而,在5.4之前似乎出现了一些变化,这可能是受支持MongoDB(使用ECMAScript语法)等流行数据库的实现的影响。
xv8emn3q3#
PHP 5.4之前版本:
PHP 5.4及更高版本
e0bqpujr4#
在PHP中数组就是数组;没有图元对对象的考虑,因此没有可比较的优化。
e5nszbig5#
你所做的是100%正确的。
在命名方面,私有/受保护的属性前面通常会加上下划线,以表明它们不是公共的。例如
private $_arr = array()
或public $arr = array()
9rbhqvlz6#
初始化简单数组:
正在初始化数组中的数组:
来源:Sorce for the code
ykejflvf7#
没有其他办法了,所以这是最好的办法。
编辑:此答案在PHP 5.4及更高版本之后无效。
7uzetpgm8#
试试这个:
sbdsn5lh9#
不要这样做:
没有用伪值/占位符值“初始化”数组的索引键这样的事情。print_r给出:
其中的元素存在,定义了键,但为空值。当以后使用数组时,无论如何都必须删除伪行。