首页 文章

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

提问于
浏览
262

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

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

8 回答

  • 4

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

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

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

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

  • 5
    $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文档中都是如此 .

    干杯,

    • =卡梅伦
  • 5

    在PHP 5.4之前:

    $myArray = array();
    

    PHP 5.4及更高版本

    $myArray = [];
    
  • 183

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

  • 51

    你正在做的是100%正确 .

    在很好的命名方面它's often done that private/protected properties are preceded with an underscore to make it obvious that they'不公开 . 例如 . private $_arr = array()public $arr = array()

  • 26

    试试这个:

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

    初始化一个简单的数组:

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

    在数组中初始化数组:

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

    资料来源:Sorce for the code

  • 18

    没有其他办法,所以这是最好的 .

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

相关问题