分配数据:数组与括号,哪个更好


assigning data: array vs brackets, which is better?

我只是想知道这两者之间的区别,性能方面以及最好使用哪一个

$data = array(
    'key1' => 'some value',
    'key2' => $some_variable
);

而这个

$data = array();  // can be omitted
$data['key1'] = 'some value';
$data['key2'] = $some_value

这种比较不是思考的方式。当您编写一些实用代码时,您将根据问题的需要在这两种方法之间切换。就像您从数据库中访问某些行一样,您将不得不在循环中使用第二行,尽管很少使用array()但在某些情况下,您会更喜欢它,因为在您没有从$_POST或数据库中获取值的情况下,必须以这种方式分配字符串索引数组。但是确实存在这两种方法都可以使用的情况,但您可能更喜欢循环中的第二种方法,因为您的代码会更短,并且您的手指在将值分配给可能是 10,000 个条目时必须承受更少的痛苦。祝您编码愉快!:)

回到这个问题,第一种方法会更快,请参阅下面的操作码:

1:

法典:

$data = array(
    'key1' => 'some value',
    'key2' => $some_variable
);

操作码:

line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   3     0  >   INIT_ARRAY                                       ~0      'some+value', 'key1'
   5     1      ADD_ARRAY_ELEMENT                                ~0      !1, 'key2'
         2      ASSIGN                                                   !0, ~0
   6     3    > RETURN                                                   1

阿拉伯数字:

法典:

$data = array();  // can be omitted
$data['key1'] = 'some value';
$data['key2'] = $some_value

操作码:

line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   INIT_ARRAY                                       ~0      
         1      ASSIGN                                                   !0, ~0
   3     2      ASSIGN_DIM                                               !0, 'key1'
         3      OP_DATA                                                  'some+value', $3
   4     4      ASSIGN_DIM                                               !0, 'key2'
         5      OP_DATA                                                  !1, $5
   5     6    > RETURN                                                   1   

基于以下代码:

<?php
$start=time();
for($i=0;$i<10000000;$i++)
{
    $data = array(
        'key1' => 'some value',
        'key2' => 3
    );
}
$end=time();
$total=$end-$start;
echo "The operation took $total seconds to complete for brackets.";
$start=time();
for($i=0;$i<10000000;$i++)
{
    $data = array();  // can be omitted
    $data['key1'] = 'some value';
    $data['key2'] = 3;
}
$end=time();
$total=$end-$start;
echo "The operation took $total seconds to complete for keys.";
?>

输出显示每个方法需要 3 秒。

答:没有明显的性能差异:)

编辑:

我也只是复制了代码并通过 CLI 在一台糟糕的旧且缓慢的 PC 上运行它(也将每次迭代中的循环增加到 100,000,000 次迭代),结果如下:

第一种方法52秒,第二种方法59秒。所以,有那么一点点的差异,但在一亿次迭代中,它几乎是随心所欲地使用:)