Eval - 时间执行在每个循环中疯狂增加

时间:2014-05-14 14:00:10

标签: php performance time eval

我有这个带有10,000条记录的源和一个循环来获取所有产品,然后使用这些列创建产品数组。

为每个零售商创建的地图不同,因此产品名称可以是产品的名称,也可以是Feed的两列。以下是一个例子。

我面临的问题是,在eval,eval,eval之后的每个循环......它开始疯狂地增加时间。即使根本没有任何功能。

Eval正在创建参考?功能 ?临时变量?有没有办法重置所有这些?

调试时间

[2014-05-14 10:21:08] [DEBUG]转换了500件商品在0.48338389396667内存使用情况:247750752阅读/总数:500/108640

(...)

[2014-05-14 10:26:06] [DEBUG]转换了500件产品在6.9182150363922内存使用情况:247751288阅读/总计:50000/108640

(...)

[2014-05-14 10:28:03] [DEBUG]转换了500件产品在7.5416939258575内存使用情况:247749704阅读/总数:60000/108640

示例

对于商家A我正在使用此php函数获取产品名称:

array_explode(",",str_replace(" ","",$NAME))[0];

所以我的映射$ v将有一个索引“f”,其后跟值为:

array_explode(",",str_replace(" ","",$NAME))[0];

在我执行该地图的评估之后

foreach($map as $k=>$v) {
    (...)
    $value = eval('return ' . $v["f"] . ";");
    (...)
}

这很好用我得到的所有产品数组都很好,但这会让我的脚本执行时间变得越来越疯狂。如果我拿走那个,脚本会以每500行/产品0.4秒的速度运行罚款。

我需要eval,因为我使用php代码来解析/设置Feed的样式。

帮助? :)

2 个答案:

答案 0 :(得分:0)

foreach($map as $k=>$v) {
    (...)
    $value = eval('return ' . $v["f"] . ";");
    (...)
}

你不能从{fore} return来。你可以假设 1。你在一个函数或方法中而 2。只会返回第一个结果,因为在return之后它会破坏循环。

如果我弄错了,它也没有意义,你为什么不:

$value = $v["f"];

<强>更新

根据您的评论,$v["f"]是一项功能,请使用call_user_func代替eval

$value = call_user_func($v["f"]);

答案 1 :(得分:0)

甚至羞于说......是我的错!没问题,我只是用-d xdebug.remote.autostart = 1运行它,每个eval都打开一个xdebug。

抱歉:(感谢您的帮助!