我只是想知道这两者之间的区别,性能方面以及哪个最好使用
$data = array(
'key1' => 'some value',
'key2' => $some_variable
);
和这个
$data = array(); // can be omitted
$data['key1'] = 'some value';
$data['key2'] = $some_value
我只是想知道这两者之间的区别,性能方面以及哪个最好使用
$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 个条目分配值时必须承受更少的痛苦。快乐编码!:)
回到这个问题,第一种方式会更快,见下面的操作码:
$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秒。所以,差别如此之小,但经过一亿次迭代,它几乎可以随心所欲地使用 :)