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 转储以确保确定。
我有一个问题...我做了一些研究,我被告知在 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 转储以确保确定。