我的for循环花了太多时间

时间:2018-06-23 19:37:14

标签: php json loops for-loop

这些天来,土耳其举行了选举,我正在编写一个PHP脚本以使用API​​进行选举,并且我的项目中有一个for循环以显示整个土耳其的总体结果。该循环总结了81个不同省份的结果,但是这花费了太多时间,有时不起作用,因为这花费了30多秒钟,并且我的页面无法加载。我该如何减少这段时间?

$mi_total_vote = 0;

for ($id=1; $id < 82; $id++) {
  $turkey_data = file_get_contents('http://secim-api.adilsecim.net/2/city/'.$id.'.json');
  $turkey_json = json_decode($turkey_data);
  $mi = $turkey_json->results->mi;
  $mi_total_vote = $mi_total_vote + $mi;
}

JSON文件是我的API数据。我必须总结它们以获得整个土耳其的结果。

2 个答案:

答案 0 :(得分:2)

使用cURL,速度更快:

<?php
    $mi_total_vote = 0;

    for ($id=1; $id < 82; $id++) {

       $ch =  curl_init('http://secim-api.adilsecim.net/2/city/1.json');
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
       $turkey_data = curl_exec($ch);  

       $turkey_json = json_decode($turkey_data);
       $mi = $turkey_json->results->mi;
       $mi_total_vote = $mi_total_vote + $mi;
    }


?>

答案 1 :(得分:1)

从中获取功能:D-通过ajax异步加载

(不会在这里工作,因为SOP-但您会明白这个概念;))

如果您很勇敢,可以执行所有84个循环并立即加载它们-但这会很快引起您不必要的注意:P

var i = 1;
var max = 82;
var sum = 0;

function load( i ) {
  $('#status').text( "Loading " + i + " of " + max );
  $.ajax({
    url: 'http://secim-api.adilsecim.net/2/city/' + i + '.json',
    type: 'JSON',
    success: function(msg) {
      sum += msg.results.mi;
      
      if( i < 82 ) {
        load(i++);
      } else {
        $('#status').text( "Loading " + i + " of " + max + " DONE" );
      }
    }
  });
}

load(i);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<small><span id="status"></span><br/></small>
<br/>
Result: <span id="result">0</span>