在PHP foreach中,生成一个数组并返回它将导致CPU利用率增加
我有一个源数组,在foreach()循环中,将根据源数组的某个字段生成一个新数组。最后,函数将返回新数组在PHP foreach中,生成一个数组并返回它将导致CPU利用率增加,php,performance,foreach,Php,Performance,Foreach,我有一个源数组,在foreach()循环中,将根据源数组的某个字段生成一个新数组。最后,函数将返回新数组 function get_role_info() { $source_array = array( 'role1' => array( 'name' => 'Eric', 'age' => '30', 'gender' => 'male'
function get_role_info() {
$source_array = array(
'role1' => array(
'name' => 'Eric',
'age' => '30',
'gender' => 'male'
),
'role2' => array(
'name' => 'Emily',
'age' => '27',
'gender' => 'female'
)
......
);
foreach ($source_array as $role_name => $role) {
$new_info= array();
$new_info['role-name'] = $role_name;
$new_storage['user-name'] = $role['name'];
...... //other filters
$newinfo[] = $new_info;
}
return $newinfo;
}
调用此函数将导致CPU利用率大幅增加。
如果我将foreach更改为for循环
for ($i=0; $i<$cnt; $i++) {
....... // same logic to filter fields
}
for($i=0;$i每个foreach
迭代返回数组中实际数据的一个副本,如果它是一个大数组和/或多维数组,则对复制的数据进行操作,然后返回$newInfo
,我想这就是CPU在这种情况下不同意您的原因
另一方面,for
循环只是循环,直到您告诉它停止(例如,直到$i<$cnt
),它不关心您在哪里应用了什么更改,当然也不会将任何内容复制到任何地方。它只是循环
另外,建议您在继续使用脚本之前unset($source\u array)
(复制脚本时,内存中现在有两个数组)
刚找到这个:
阅读更多信息:每次foreach
迭代都会返回数组中实际数据的一个副本,如果是大型数组和/或多维数组,则您对复制的数据进行操作,然后返回$newInfo
,我想这就是CPU在这种情况下不同意您的原因
另一方面,for
循环只是循环,直到您告诉它停止(例如,直到$i<$cnt
),它不关心您在哪里应用了什么更改,当然也不会将任何内容复制到任何地方。它只是循环
另外,建议您在继续使用脚本之前unset($source\u array)
(复制脚本时,内存中现在有两个数组)
刚找到这个:
阅读更多: