-3

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

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

和这个

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

3 回答 3

2

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

于 2013-09-26T04:32:40.347 回答
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   
于 2013-09-26T04:15:12.433 回答
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,000,000 次迭代),结果如下:

第一种方法52秒,第二种方法59秒。所以,差别如此之小,但经过一亿次迭代,它几乎可以随心所欲地使用 :)

于 2013-09-26T04:15:52.990 回答