【问题标题】:In PHP foreach generate an array and return it will cause CPU utilization increasing在 PHP foreach 中生成一个数组并返回它会导致 CPU 使用率增加
【发布时间】:2012-03-02 06:51:07
【问题描述】:

我有一个源数组,在 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 也不会变高。 有人对此有所了解吗?谢谢。

【问题讨论】:

    标签: php performance foreach


    【解决方案1】:

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

    另一方面,for 循环只是循环直到你告诉它停止(例如直到$i &lt; $cnt),它不关心你在哪里应用什么更改,它当然不会复制任何东西到任何地方。它只是循环。

    另外,http://php.net/manual/en/control-structures.foreach.php 建议您在继续执行脚本之前使用unset($source_array)(因为它已被复制,并且您现在在内存中有两个数组)

    刚刚找到这个
    阅读更多:Performance of FOR vs FOREACH in PHP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 2021-06-23
      • 2010-12-15
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多