PHP array_merge 在循环中使用时特别慢且占用内存

PHP array_merge is particularly slow and memory intensive when it is used in a loop

我有一个问题...我做了一些研究,我被告知在 foreach 中有一个 array_merge 可能特别慢并且占用大量内存,我需要这个代码块的替代方案.但是我不确定最好的课程是什么

有人能帮忙吗?

/**
 * Parse long itrative tags
 *
 * Return array of matches for iterative tag pattern e.g. {%label%} to output the document label on this iteration of the loop
 *
 * @access  public
 * @return  array
 */

function parse_long_iterative_tags($text)
{
    $pattern = "/{%(?P<type>[A-Za-z0-9_?!]+):\((?P<name>.+)\)[\s]*(?P<attributes>[A-Za-z0-9\s_,:?.\/\-\|\(\)]*?){[\s]*(?P<content>(.*?[\s]*)*)[\s]*\}[\s]*end\1\%}/";
    preg_match_all($pattern,$text,$matches);
    if(!empty($matches['content'])):
        $nested = implode("",$matches['content']);
        $sub_matches =  $this->parse_long_iterative_tags($nested);
        foreach($matches as $k=>$v):
            $matches[$k] = array_merge($matches[$k],$sub_matches[$k]);
        endforeach;
        return $matches;
    else:
        return $matches;
    endif;
    return $matches;
}

你有没有试过 运行 像这样用双循环而不是

foreach($matches as $k=>$v):
   $matches[$k] = array_merge($matches[$k],$sub_matches[$k]);

你会做:

foreach($matches as $k=>$v)
  foreach($submatches[$k] as $j=>$v2)
   $matches[$k][$j] = $v2;

它应该大致代表相同的输出,但是您应该再次尝试发布生成的 $matches 数组的 var 转储以确保确定。