0

我有一个需要在 1 个 foreach 循环中调用多次的 api,我一直在这样做的方式是定义 api url 并解析循环内的信息,因此它被一遍又一遍地调用,直到循环结束,但我想知道如果有另一种方法来处理这样的事情。例如,如果我有一个从大约 50 个状态的状态获取信息的 api,并且我把它放在一个 foreach 循环中,它会循环所有 50 次,这将使结果加载非常慢,我这样做是否正确?如果没有,我应该如何处理这样的事情?

这是我如何尝试使用它的示例。

//Theses are the states
  $z_state_abrev = zillow_state_abrev();  

//this is the foreach loop. 
  foreach($z_state_abrev as $states){
    $zillow_id = 'X1-ZWz1bp6dndxfd7_75222';
    $xml = file_get_contents('http://www.zillow.com/webservice/GetRateSummary.htm?zws-id='.$zillow_id.'&state='.$states.'');
    $zinfo_rates = simplexml_load_string($xml);
    foreach($zinfo_rates->response as $rates){
        dpr($rates->today->rate[0]);
        $zinfo_rates .= $rates->today->rate[0];
    }

  }
4

2 回答 2

0

在这种情况下,memcache 是我能想到的最佳选择

http://php.net/manual/en/book.memcache.php

file_get_contents 的结果存储到内存缓存中,随后的调用将从缓存中提取。第一次运行它会很慢,但每次调用之后都会快得多。

它稍微增加了您的复杂性,但请记住 Web 开发的第二条规则,经常缓存和缓存。

于 2013-02-27T19:21:20.250 回答
0

如果 API 没有为您提供在一个请求中获取多个数据的方法,那么您就不走运了。

但是,为了加快调用速度,请查看curl_multi(或实现它的请求库)以并行而不是串行进行调用。

于 2013-02-27T19:22:07.210 回答