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

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

  class Foo {
private $ arr = array(); //还有其他/更好的方式吗?
}
</ code> </ pre>
</ div>

展开原文

原文

In certain other languages (AS3 for example), it has been noted that initializing a new array is faster if done like this var foo = [] rather than var foo = new Array() for reasons of object creation and instantiation. I wonder whether there are any equivalences in PHP?

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

drnx3715
drnx3715 这是一个非常麻烦的创建空数组的方法。当然少于OP$arr=array()或$arr=[]
接近 5 年之前 回复
dousou1878
dousou1878 尝试array_fill?php.net/manual/en/function.array-fill.php
接近 5 年之前 回复
duan62819774
duan62819774 这个问题有很大帮助
6 年多之前 回复
douxing9228
douxing9228 感谢所有回答的人(并且很快!)。我不得不随意选择一个答案,所以Andy似乎是最深入的。
9 年多之前 回复
dongyuying1507
dongyuying1507 这就是我做过的一切。
9 年多之前 回复

8个回答

In ECMAScript implementations (for instance, ActionScript or JavaScript), Array() is a constructor function and [] is part of the array literal grammar. Both are optimized and executed in completely different ways, with the literal grammar not being dogged by the overhead of calling a function.

PHP, on the other hand, has language constructs that may look like functions but aren't treated as such. Even with PHP 5.4, which supports [] as an alternative, there is no difference in overhead because, as far as the compiler/parser is concerned, they are completely synonymous.

// 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",
];

If you need to support older versions of PHP, use the former syntax. There's also an argument for readability but, being a long-time JS developer, the latter seems rather natural to me.  I actually made the mistake of trying to initialise arrays using [] when I was first learning PHP.

This change to the language was originally proposed and rejected due to a majority vote against by core developers with the following reason:

This patch will not be accepted because slight majority of the core developers voted against. Though if you take a accumulated mean between core developers and userland votes seems to show the opposite it would be irresponsible to submit a patch witch is not supported or maintained in the long run.

However, it appears there was a change of heart leading up to 5.4, perhaps influenced by the implementations of support for popular databases like MongoDB (which use ECMAScript syntax).

douyong1285
douyong1285 这是一个令人费解的答案。 $ array = [];
接近 5 年之前 回复
drwo32555
drwo32555 哈哈哈好一个。 他们一定知道如何,已经有一段时间了。
接近 5 年之前 回复
dongxun2903
dongxun2903 我只是有一个致命的错误,如果你正在开发一个可以在任何主机上使用的软件,而不是你自己,不要使用新的语法!
5 年多之前 回复
duanmeng1858
duanmeng1858 []语法似乎是普遍优先考虑的,但重要的是要注意仍有大量主机仍然使用5.3。 如果要分发代码,[]语法将会致命。
接近 6 年之前 回复
doushu7588
doushu7588 这是个人喜好的问题。 它们在功能上完全相同,[]只是更容易打字。
6 年多之前 回复
dtwxt88240
dtwxt88240 那么$ array = []; 更好的选择??? 或者我应该尝试其他的。 哪一个更好
6 年多之前 回复
douguiyan9164
douguiyan9164 同样在这里,我现在只在PHP中使用方括号语法。
6 年多之前 回复
dongqie7806
dongqie7806 我更喜欢$ array = []; 因为它使JS和PHP之间的来回变得更容易。
6 年多之前 回复
dslf46995
dslf46995 可能是5.4的变化是因为那些可以拼写“哪个”接管投票过程的人:)
接近 7 年之前 回复



  $ myArray = [];

</ code> </ pre>

创建空数组。</ p>

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

  $ myArray [] =“tree”; 
$ myArray [] =“house”;
$ myArray [] =“dog”;
</ code> </ pre> \ n

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

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

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

  未设置($ myArray的[1]);

</ code> </ pre>

...将从数组中删除“house”(数组从零开始)。</ p>

  未设置($ myarray的);

</ code> </ pre>

...会破坏整个数组。</ p>

要清楚,空括号括起来的方括号语法 数组只是告诉PHP自动为每个值分配索引的一种方式,而不是你分配索引。 在幕后,PHP实际上是这样做的:</ p>

  $ myArray [0] =“tree”; 
$ myArray [1] =“house”;
$ myArray [2] =“dog”;
</ code> </ pre>

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

所以如果你这样做:</ p>

  $ myArray [10] =“tree”; 
$ myArray [20] =“house”;
$ myArray [] =“dog”;
</ code> </ pre> \ n

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

干杯,</ p>

- = Cameron </ p>
</ DIV>

展开原文

原文

$myArray = []; 

Creates empty array.

You can push values onto the array later, like so:

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

At this point, $myArray contains "tree", "house" and "dog". Each of the above commands appends to the array, preserving the items that were already there.

Having come from other languages, this way of appending to an array seemed strange to me. I expected to have to do something like $myArray += "dog" or something... or maybe an "add()" method like Visual Basic collections have. But this direct append syntax certainly is short and convenient.

You actually have to use the unset() function to remove items:

unset($myArray[1]); 

... would remove "house" from the array (arrays are zero-based).

unset($myArray); 

... would destroy the entire array.

To be clear, the empty square brackets syntax for appending to an array is simply a way of telling PHP to assign the indexes to each value automatically, rather than YOU assigning the indexes. Under the covers, PHP is actually doing this:

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

You can assign indexes yourself if you want, and you can use any numbers you want. You can also assign index numbers to some items and not others. If you do that, PHP will fill in the missing index numbers, incrementing from the largest index number assigned as it goes.

So if you do this:

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

... the item "dog" will be given an index number of 21. PHP does not do intelligent pattern matching for incremental index assignment, so it won't know that you might have wanted it to assign an index of 30 to "dog". You can use other functions to specify the increment pattern for an array. I won't go into that here, but its all in the PHP docs.

Cheers,

-=Cameron

douzuo5504
douzuo5504 哈哈...心灵吹拂。 几十年的PHP和我只是在学习你不需要array_push。
大约一年之前 回复
doujiao7679
doujiao7679 公平地说,这实际上回答了OP的问题。
接近 3 年之前 回复
dqxyh48864
dqxyh48864 我见过的最完整,最明确的答案之一。 很好!
4 年多之前 回复
douluanji8752
douluanji8752 多么好的答案 - 如此清楚地解释,任何人都可以理解这一点。
4 年多之前 回复
duanjiao1931
duanjiao1931 你误解了@ TomAuger的观点@Mark。 $ array [] ='foo'在旧版本的PHP中运行得很好。 它只有$ array = []; 初始化5.4中的新数组。
接近 5 年之前 回复
dongli2000
dongli2000 对于早期版本,您可以使用array_push()w3schools.com/php/func_array_push.asp我不知道是否存在与此相关的性能损失。
5 年多之前 回复
dspwy24648
dspwy24648 值得注意的是,$ ary = []仅适用于PHP 5.4之后。 从性能的角度来看,[]与array()没有任何优势。
接近 6 年之前 回复



你正在做的是100%正确。</ p>

就好的命名而言,它经常是 完成私有/受保护的属性前面有一个下划线,以显示它们不公开。 例如。 private $ _arr = array()</ code>或 public $ arr = array()</ code> </ p>
</ div>

展开原文

原文

What you're doing is 100% correct.

In terms of nice naming it's often done that private/protected properties are preceded with an underscore to make it obvious that they're not public. E.g. private $_arr = array() or public $arr = array()

dongyi9298
dongyi9298 你可以像$ this-> arr和$ this - > _ arr一样访问它们。 为什么你永远不要使用公共财产?!
9 年多之前 回复
douqiu1604
douqiu1604 在PHP中,我认为最好不要用下划线命名它们,因为你总是使用$ this来获取值,并且永远不应该使用公共属性。
9 年多之前 回复



试试这个:</ p>

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

//将打印
// array(0){}
</ code> </ pre>
</ div>

展开原文

原文

Try this:

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

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

dongshi6969
dongshi6969 如果您想在具有属性模式的对象中创建数组并在最后将其转换为数组,则可能很有用。
接近 5 年之前 回复
dou5454954610
dou5454954610 有点酷,但更多的是作为派对技巧而不是真正有用的编码模式,你不觉得吗?
6 年多之前 回复



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

展开原文

原文

In PHP an array is an array; there is no primitive vs. object consideration, so there is no comparable optimization to be had.

douyi1197
douyi1197 因此,在确定您的代码永远不会在5.4之前的环境中运行之前,请使用$ array = new array()
大约 6 年之前 回复
dongmiyi8220
dongmiyi8220 是否涉及性能问题..我可以检查这个..任何链接或文档
6 年多之前 回复
dsf1222
dsf1222 最好的答案IMO:有不同的语法,但关于性能他们都是相同的。
8 年多之前 回复



PHP 5.4之前:</ p>

  $ myArray = array(); 
</ code> </ pre>

PHP 5.4及更高版本</ p>

  $ myArray = []; 
</ code> </ pre> \ n </ div>

展开原文

原文

Prior to PHP 5.4:

$myArray = array();

PHP 5.4 and higher

$myArray = [];

dtt83024
dtt83024 我们如何使用PHP 5.4或更高版本制作多维数组?
2 年多之前 回复



别的方式</ strong>,所以这是最好的。</ strike> </ p>

编辑:自PHP 5.4及更高版本起,此答案无效。</ p>
</ div>

展开原文

原文

There is no other way, so this is the best.

Edit: This answer is not valid since PHP 5.4 and higher.

douci6541
douci6541 当他们删除答案时,人们会从答案中失去代表收益。 编辑它会更好。
一年多之前 回复
douchuitang0331
douchuitang0331 为什么这么讨厌:'(?开玩笑说,我通过“敲击”旧的答案使其更明确。对于新手来说,理解答案已经改变仍然是有用的。
大约 7 年之前 回复
duanguilin2007
duanguilin2007 的确,我编辑了答案
8 年多之前 回复
dongxing4805
dongxing4805 这不再是这种情况,5.4引入了数组的简写语法。
8 年多之前 回复

Initializing a simple array :

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

Initializing array within array :

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

Source : Sorce for the code

dongxian1699
dongxian1699 最初的问题是如何初始化一个空数组。
接近 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问