用更高效的PHP替换嵌套的Foreach循环

问题描述 投票:0回答:3

我有两个数组,每个数组都有不同的结构:

$websites = Array (
     [1131] => Array (
          [httpcode] => 403
          [user_id] => 265
     )

     [1130] => Array (
          [httpcode] => 403
          [user_id] => 265
     )
)

$responses = Array (
     [1131] => 200
     [1130] => 500
)

我正在使用嵌套的foreach循环,将httpcode数组中的$websites替换为httpcode数组中相应的新$responses

foreach ($websites as $site_id => &$details) {
    foreach ($responses as $resp_id => $new_http)  {
        if ($site_id == $resp_id) {
            $details['httpcode'] = $new_http;
        }  
    }        
}

这成功完成,我得到正确的结果:

$websites = Array (
     [1131] => Array (
          [httpcode] => 200
          [user_id] => 265
     )

     [1130] => Array (
           [httpcode] => 500
           [user_id] => 265
     )
)

但是,我知道嵌套的foreach循环在CPU周期上的成本很高,并且我想知道对于减少服务器上的CPU使用率,大型阵列是否有更有效的方法。

php arrays performance foreach processing-efficiency
3个回答
1
投票

第二个循环是完全没有意义的。这就足够了:

foreach ($websites as $site_id => &$details) {
    $details['httpcode'] = $responses[$site_id];
}

如果两个阵列可能不同步,则可能需要添加检查

foreach ($websites as $site_id => &$details) {
    if (array_key_exists($site_id, $responses)) {
        $details['httpcode'] = $responses[$site_id];
    }
}

0
投票

如果阵列键相同:

foreach(array_keys($websites) as $key) {
  $websites[$key]['httpcode'] = $responses[$key];
}
© www.soinside.com 2019 - 2024. All rights reserved.