1

寻求您的帮助以使用 PHP 生成器转换一个大数组。下面是我需要返工的代码:我从服务调用中得到一个结果集并将所有分配给一个数组:

foreach ($objects->result as $pointStdObject) {
  $pointStdObjects[] = $pointStdObject;
}

这段代码在一个 while 循环中,它查询偏移量为 1000 的记录。问题是 $pointStdObjects[] 往往会变得非常大,我得到 PHP 内存不足异常。

后来我再次需要使用这个相同的数组:

foreach ($pointStdObjects as $pointStdObject) {
  $point = $this->pointFactory->createPointFromStdObject($pointStdObject);
  if (!$point) {
    continue;
  }
  $points[] = $point;
}
return $points;

请建议我们是否可以利用 PHP 生成器或在此处生成

4

1 回答 1

1
function getStd()
{
   ///your code before that
    foreach ($objects->result as $pointStdObject) {
        yield $pointStdObject;
    }
}

function useStd()
{
    foreach (getStd() as $pointStdObject) {
        $point = $this->pointFactory->createPointFromStdObject($pointStdObject);
        if (!$point) {
            continue;
        }
        $points[] = $point;
    }
    return $points;
}
于 2020-08-27T09:47:42.523 回答