Php:数组嵌套循环性能


Php: arrays nested loop performance

我有两个数组

$list = Array
([0] => stdClass Object
    (
        [id] => 10
        [data] => "test data"
    )
[1] => stdClass Object
...
...(max 3000 ~ 4000 items)

$attributes = Array
([0] => stdClass Object
    (
        [ids] => 11
        [list] => '<ul>...</ul>'
    )
[1] => stdClass Object
...
...(max 3000 ~ 4000 items)

我正试图离开并加入他们,但我能够写这篇文章的唯一表现方式是

$nrrowslist = count($list);
for ($i = 0; $i < $nrrowslist; $i++){
  $nrat = count($attributes);
  for ($j = 0; $j < $nrat; $j++)
  {
    if($list[$i]->id == $attributes[$j]->ids){
      $list[$i]->attributes = $attributes[$j]->list;
      array_splice($attributes, $j, 1); // remove the item
      break; // since there is other item with that id 
    }
  }
}

//在约0.470秒内完成

但如果我写

foreach($list as $art){
  foreach($attributes as $attr){
    if($art->id == $attr->ids){
      $art->attributes = $attr->list;           
    }
  }
}

它在大约5.500秒内完成。。太多

我能做些什么来执行更多的第一种方法的情况?

您可能会在两次迭代中取得一些成功,并在分配中使用公共参数

$newlist = array();
// I'm sure there's a better way to do this initial assignment
foreach($list as $row)
{
  $newlist[$row->id] = $row;
}
foreach($attributes as $attr)
{
  if(isset($newlist[$attr->ids]) === true)
  {
    $newlist[$attr->ids]->attributes = $attr->list;
  }
}
var_dump($newlist);