这是我的代码:
$size_all_colonies = sizeof($all_colonies) ;
$size_all_coods = sizeof($all_cood) ;
for ( $i = 0 ; $i < $size_all_colonies ; $i++ )
{
$id = $all_colonies[$i]['id'] ;
$colony_name = $all_colonies[$i]['colony_name'] ;
$colony_node = $dom->createElement('colony');
$response->appendChild($colony_node);
$colony_text_node = $dom->createTextNode($colony_name) ;
$colony_node->appendChild($colony_text_node) ;
$id_node = $dom->createElement('id_node') ;
$colony_node->appendChild($id_node) ;
$id_node->appendChild($dom->createTextNode($id)) ;
$coods = "" ;
for ( $j = 0 ; $j < $size_all_coods ; $j++ )
{
if ( $id == $all_cood[$j]['colony_id'] )
{
$coods .= $all_cood[$j]['latitude'].",".$all_cood[$j]['longitude'].";" ;
// break ;
}
}
$coods =substr($coods,0,-1);
$cood_node = $dom->createElement('cood_node') ;
$colony_node->appendChild($cood_node) ;
$cood_node->appendChild($dom->createTextNode($coods)) ;
echo $id . ' ' ;
}
说明:
all_colonies =是一个多维数组 - size-7000
all_coods - 另一个多阵列 - 大小70000
all_cood [$ j] ['colony_id']是外键,对应all_colonies [$ i] ['id']。
这是构建一个ajax请求的响应,理想情况下应该花费几分钟,但是需要花费几个小时:(并且它会逐渐减慢,就像前面的1000个循环/迭代(外部)一样30秒,但下一千分钟需要几分钟,下一千分钟需要一分钟。
请帮忙!
谢谢
编辑:不需要break语句!当我迫不及待地提高性能时,我补充道,但它不应该在那里......
答案 0 :(得分:1)
你可以尝试的是将all_coods变量设置为由id索引,而不是仅仅是一个数组。这样你就可以节省内循环的时间。
例如:
$list = tons of stuff
//now, loop through the stuff once to generate
//the assoc array that's indexed by IDs
$listMap = array();
foreach($list as $item) {
$listMap[$item['id']] = $item;
}
//the main looping
foreach(loop an array) {
if(isset($listMap[$id])) {
//you just saved looping through the other array.
}
}