我只是想知道这两者之间的区别,性能方面以及最好使用哪一个
$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秒。所以,有那么一点点的差异,但在一亿次迭代中,它几乎是随心所欲地使用:)