2

这是我的第一个问题。

我正在对 php 脚本进行一些优化,以提高其执行速度...

之间 :

$datas = array();
$datas['file_import'] = $file_name_reporting;

和 :

unset($datas);
$datas['file_import'] = $file_name_reporting;

谁能告诉我哪个更快?

谢谢

4

6 回答 6

2

您的第二个示例会导致警告,因为$datas现在是null并且您将其视为数组,因此您必须在之前将其声明为空数组。

因此,只需按照您的第一个示例 - 分配一个空数组,然后将一些数据放入其中。

于 2012-03-01T11:09:17.383 回答
1

我认为第一种方法只是覆盖,但第二种方法包括删除、检查存在、触发警告和创建新数组

于 2012-03-01T11:13:29.110 回答
1

声称任何一种形式都比另一种形式“更快”是荒谬的。这两个版本的执行速度都非常快,以至于您需要在循环中运行它们数百万次才能注意到差异。你真的在你的脚本中这样做吗?如果没有,请忘记这里的“优化”(实际上, “通过眼睛”忘记所有优化是个好主意,正如任何有经验的开发人员都可以告诉你的那样)。

最重要的是,这两个版本实际上做了不同的事情,因为这unset将从 sumbol 表中删除名称$datas(并在您尝试将值添加到数组时在下一行给您一个通知)。

只需使用感觉正确的东西,并查看繁重的循环以找到要优化的东西。

于 2012-03-01T11:13:55.317 回答
1

在这两种情况下,都会构造一个新的数组。在 php 中取消设置变量,会将其值设置为 null,仅在下一行调用数组构造函数。虽然我同意 knittl,但我的建议是:

$datas = array('file_import' => $file_name_reporting);

通过创建一个新数组,您会自动“取消设置”变量,并通过将值传递给数组构造函数,您可以在数组中填充您想要的任何值。

于 2012-03-01T11:13:55.570 回答
1

显然,第一个代码会运行得更快,因为您只执行两个操作:显式创建一个数组并添加一部分数据。第二个示例将导致警告,因为您销毁了一个变量,然后再次尝试使用它。

此外unset不会释放已使用的内存,它只会释放变量上的指针。运行 gc 时将释放内存。要释放内存,请$datas = null;改用。

于 2012-03-01T11:16:42.887 回答
1

array() 将创建一个数组,而 unset() 将销毁一个变量。

于 2012-03-01T11:11:35.873 回答