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

Php 分配数据:数组与括号,哪个更好?,php,arrays,optimization,Php,Arrays,Optimization,我只是想知道这两者之间的区别,性能方面,哪一个是最好的使用 $data = array( 'key1' => 'some value', 'key2' => $some_variable ); 这个呢 $data = array(); // can be omitted $data['key1'] = 'some value'; $data['key2'] = $some_value 回到这个问题,第一种方法会更快,请参阅下面的操作码: 1: 代码: 操作码:

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

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

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

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

1: 代码: 操作码: 2: 代码: 操作码:
基于以下代码:

<?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上运行了它(每次循环的次数也增加到100000000次),结果如下:


第一种方法52秒,第二种方法59秒。所以,尽管差别很小,但在一亿次迭代中,几乎可以随心所欲地使用:)

这种比较不是思考的方式。当您编写一些实用代码时,您将根据问题的需要在这两种方法之间交替切换。例如,如果要从数据库访问某行,则必须在循环中使用第二行,虽然很少使用
array()
,但在某些情况下,您更愿意使用它,因为在无法从
$\u POST
或数据库获取值的情况下,字符串索引数组必须以这种方式分配。但确实存在两种方法都可以使用的情况,但您可能更喜欢循环中的第二种方法,因为您的代码将更短,并且您在为可能是10000个条目赋值时需要承受的痛苦更少。快乐编码!:)

这是一个荒谬的不相关的性能差异量,如果有的话。在这些事情被证明是你的问题之前,不要担心。在这种情况下,使用最有意义的语法。这取决于您的需求……在这里测试性能似乎非常容易。写一个循环,每个循环10000000个,看看每个循环需要多长时间。我把它们放在一个循环(1000000)中,第二个循环更快(半秒)!
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.";

?>