Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组映射与循环和操作_Php_Spl_Array Map - Fatal编程技术网

Php 数组映射与循环和操作

Php 数组映射与循环和操作,php,spl,array-map,Php,Spl,Array Map,使用: $maxHeap作为对象类maxHeap扩展了SplMaxHeap这是由于回调函数和普通函数之间的差异 在第二个迭代中,使用foreach对数组进行迭代,每次迭代调用“insert”函数并等待执行(函数返回控制),然后继续下一次迭代 但是在array_map函数中,“insert”作为回调函数出现,它调用“insert”,不等待结果,而是使用数组中的下一项调用insert。所以速度更快 希望能有所帮助。据我所知,与Sajith Amma的回答相比,php没有异步执行任何操作 我怀疑这实际

使用:


$maxHeap
作为对象
类maxHeap扩展了SplMaxHeap

这是由于回调函数和普通函数之间的差异

在第二个迭代中,使用foreach对数组进行迭代,每次迭代调用“insert”函数并等待执行(函数返回控制),然后继续下一次迭代

但是在array_map函数中,“insert”作为回调函数出现,它调用“insert”,不等待结果,而是使用数组中的下一项调用insert。所以速度更快


希望能有所帮助。

据我所知,与Sajith Amma的回答相比,php没有异步执行任何操作

我怀疑这实际上是由于
$maxHeap->insert
的查找不同造成的

使用当前范围内调用的
foreach
循环
$maxHeap->insert
,php解释器必须查找
maxHeap
,然后在
maxHeap
实例上查找
insert
。在您正在运行的脚本范围内,可能有其他变量会使查找速度变慢


使用
array\u map
php解释器知道它将调用完全相同的
$maxHeap->insert
,它可以只执行一次查找,并在剩余的迭代中使用相同的“代码地址”。

如果您要进行否决投票,请给出原因!有趣的问题,据我所知,PHP的
array\u map()
在内部表示为
foreach
-如果我错了,请纠正我。因为每个内置函数/方法的操作码调用开销都比手动操作少
array_map
是一种内置方法,它在C级而不是操作码中处理数组,然后在C.P.S中处理数组。正如我看到的$ArrayOfNumber循环。。我也必须告诉你:foreach比while快,while比for快。如果使用它来迭代数组,请使用foreach。For是最慢的,因为它每次迭代进行2次检查。首先检查结束条件,然后检查+++$i。因此,试着使用
foreach(范围(11000)为$i)
而不是用于和基准.p.p.s。另外,第二个foreach中的方法调用是另一个通过操作码开销执行操作的方法。在几乎所有语言中,对象都比函数慢,包括php。因此,实际上您正在生成这个(以操作码为例):[what is$arrayOfNumbers?lookup]循环:[在foreach中获取下一个数组项][assign variable$number][$maxHeap?哦,我必须查找它][它是对象吗?我可以调用insert吗?如果不是,引发异常][我正在调用它,带参数][将该参数放入COW缓冲区][继续在insert中执行其他操作][检查返回值][无?很好。][如果可以,下一个循环]。我想知道这怎么可能是真的:array_map返回回调返回的数组…这就是“map”的行为。我还强烈怀疑php是否异步运行调用。-1,因为缺乏良好的引用。
for($i=1; $i<= 10000; ++$i) {
    $arrayOfNumbers[] = rand(1, 99999);
}
array_map(array($maxHeap, 'insert'), $arrayOfNumbers);
# Avg Time: 0.92856907844543s

# against

foreach($arrayOfNumbers as $number) {
    $maxHeap->insert($number);
}
# Avg Time: 1.3148670101166