首页 > 解决方案 > php - 只有来自 api 请求的最后一个结果

问题描述

我从 api 获得了一些数据,但我只是想获得最新的数据。

当我 print_r 的数据看起来像这样:

Array
(
    [curlResult] => Rank,Club,Country,Level,Elo,From,To
None,Ajax,NED,1,1069.13220215,1956-07-01,1956-09-02
None,Ajax,NED,1,1074.29101562,1956-09-03,1956-09-09
None,Ajax,NED,1,1084.49816895,1956-09-10,1956-09-23
None,Ajax,NED,1,1091.4354248,1956-09-24,1956-09-30 //this one
)

这会产生数千个结果,但我只需要最后一行(最近的)。因此,如果结果是上述结果,我想从后面有“//this one”的行中获取所有数据。

这是我用来获取数据的代码:

<?php
function makeRequest($url, $callDetails = false)
{
  // Set handle
  $ch = curl_init($url);

  // Set options
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  // Execute curl handle add results to data return array.
  $result = curl_exec($ch);
  $returnGroup = ['curlResult' => $result,];

  // If details of curl execution are asked for add them to return group.
  if ($callDetails) {
    $returnGroup['info'] = curl_getinfo($ch);
    $returnGroup['errno'] = curl_errno($ch);
    $returnGroup['error'] = curl_error($ch);
  }

  // Close cURL and return response.
  curl_close($ch);
  return $returnGroup;
}

$url = "http://api.website.com/Ajax";/* some url */
$response = makeRequest($url);

// $csv = array_map('str_getcsv', $response);
echo '<pre>';
print_r($response);

?>

标签: phparrayscurl

解决方案


在线找到您的 API 后,我能够为您创建此答案:

$resp = makeRequest('http://api.clubelo.com/Wolves')['curlResult'];
$result = array_filter(explode("\n", $resp), function ($record) {
    return !empty($record);
});

$headings = explode(',', reset($result));
$record = explode(',', end($result));

$last = array_combine($headings, $record);

$resp由函数调用组成,然后我立即访问 cURL 操作的结果。

$result使用该explode函数将 API 响应的每一行分成自己的“记录”。

$headings并将$recordAPI 响应拆分为各自的“字段”。
reset是一个 PHP 函数,它将内部指针重置为数组的开头并返回该项目。
end是相反的reset并将内部指针设置到数组的末尾并返回该项目。

$last将是来自 API 的最后一条记录,其$headings设置为数组键,其值是响应中的相应值。

这是你无法控制的,但这个 API 可以提供更好的服务!这段代码中的大部分都在合理地呈现响应。


推荐阅读