2012-03-02 7 views
1

私はソース配列を持っていますが、foreach()ループではソース配列のいくつかのフィールドに基づいて新しい配列が生成されます。最後に関数は新しい配列を返します。PHP foreachは配列を生成し、それを返すとCPU使用率が増加します

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使用率が大幅に増加します。私はループ

for ($i=0; $i<$cnt; $i++) { 
    ....... // same logic to filter fields 
} 

のためにforeachのを変更した場合 CPU使用率が下がるだろう...私はこれらの2の違いを何かわからない ? 新しい配列を出力して返していないだけでは、CPUの高さも上がらないでしょう。 誰かがそれについて何か手掛かりを持っていますか?どうも。

答えて

3

foreach反復は、それが大きな配列および/または多次元であれば、あなたがコピーされたデータ上で動作し、その後CPUが同意しない理由を$newInfoとのthatsを返却され、アレイ内であなたが持っている実際のデータのコピーを返します。この場合あなたと一緒に私は推測します。

forループは、停止するように指示するまでループしています(たとえば$i < $cntまで)。どこに変更を適用しても問題はありません。 。それだけでループします。

また、あなたのスクリプトを続行する前http://php.net/manual/en/control-structures.foreach.phpunset($source_array)にあなたをお勧めします(それがコピーされて、あなたは今、メモリ内の二つの配列を持つ)

はちょうどこのが見つかりました:
続きを読む: Performance of FOR vs FOREACH in PHP

関連する問題