Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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 foreach中,生成一个数组并返回它将导致CPU利用率增加_Php_Performance_Foreach - Fatal编程技术网

在PHP foreach中,生成一个数组并返回它将导致CPU利用率增加

在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'

我有一个源数组,在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
}

for($i=0;$i每个
foreach
迭代返回数组中实际数据的一个副本,如果它是一个大数组和/或多维数组,则对复制的数据进行操作,然后返回
$newInfo
,我想这就是CPU在这种情况下不同意您的原因

另一方面,
for
循环只是循环,直到您告诉它停止(例如,直到
$i<$cnt
),它不关心您在哪里应用了什么更改,当然也不会将任何内容复制到任何地方。它只是循环

另外,建议您在继续使用脚本之前
unset($source\u array)
(复制脚本时,内存中现在有两个数组)

刚找到这个:

阅读更多信息:

每次
foreach
迭代都会返回数组中实际数据的一个副本,如果是大型数组和/或多维数组,则您对复制的数据进行操作,然后返回
$newInfo
,我想这就是CPU在这种情况下不同意您的原因

另一方面,
for
循环只是循环,直到您告诉它停止(例如,直到
$i<$cnt
),它不关心您在哪里应用了什么更改,当然也不会将任何内容复制到任何地方。它只是循环

另外,建议您在继续使用脚本之前
unset($source\u array)
(复制脚本时,内存中现在有两个数组)

刚找到这个:
阅读更多: