0

これは私のコードです:

    $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=は多次元配列です-サイズ-7000

all_coods-別のマルチ配列-サイズ70000

all_cood [$ j] ['colony_id']は外部キーであり、all_colonies [$i]['id']に対応します。

これは、ajaxリクエストの応答を作成しています。これは、理想的には数分かかるはずですが、数時間かかります:(。そして、最初の1000回のループ/反復(外部)が30秒未満で発生するように、徐々に遅くなります。しかし、次の千は数分かかり、次の千は永遠にかかります。

助けてください!

ありがとう

編集:breakステートメントは必要ありませんでした!パフォーマンスを向上させたいと思ったときに追加しましたが、そこにあるべきではありません。

4

1 に答える 1

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.
    }
}
于 2012-11-10T21:26:59.333 に答える