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

时间:2013-09-26 04:02:32

标签: php arrays optimization

我只是想知道这两者之间的区别,表现明智,哪一个最好用

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

和这一个

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

2

$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   

答案 2 :(得分:0)

基于以下代码:

<?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万次迭代),结果如下:

第一种方法52秒,第二种方法59秒。所以,如此微小的差异,但是在一亿次迭代中,它几乎可以用到你想要的任何东西:)