我有一个源数组,在foreach()循环中,将根据源数组的某些字段生成一个新数组。最后,该函数将返回新数组。
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
}
CPU利用率将下降...... 我不确定这两者之间有什么区别? 如果我只打印新阵列而不返回它,CPU也不会变高。 有人有一些线索吗? THX。
答案 0 :(得分:4)
每个foreach
迭代都会返回您在数组中拥有的实际数据的副本,如果它是一个大数组和/或多维,您正在对复制的数据进行操作,然后返回$newInfo
,那就是为什么CPU在这种情况下不同意你的意思。
for
循环只是循环,直到你告诉它停止(例如,直到$i < $cnt
),它并不关心你在哪里做什么改变,它肯定没有不要把任何东西复制到任何地方。它只是循环。
另外,http://php.net/manual/en/control-structures.foreach.php建议您在继续编写脚本之前unset($source_array)
(因为它已被复制,现在内存中有两个数组)
刚发现这个:
阅读更多:Performance of FOR vs FOREACH in PHP