0

一定有更好的方法!这是我的代码:

checksession();
$restNew2 = new RESTConnector();


$urlNew2 = "https://localhost:9630/api/products/";
$restNew2->createRequest($urlNew2,"GET", null, $_SESSION['cookies'][0]);
$restNew2->sendRequest();


$responseNew2 = $restNew2->getResponse();
$xmlNew2 = new SimpleXMLElement($responseNew2);

foreach ($xmlNew2 as $purge){
    $id = (string)$purge->attributes()->id;

checksession();
$restNew = new RESTConnector();


$urlNew = "https://localhost:9630/api/products/".$id."/";
$restNew->createRequest($urlNew2,"GET", null, $_SESSION['cookies'][0]);
$restNew->sendRequest();


$responseNew = $restNew->getResponse();
$xmlNew[] = new SimpleXMLElement($responseNew);



}
$array = array();

foreach ($xmlNew as $purgeDet){
    $code[] = (string)$purgeDet->code;
    $classId[] = (string)$purgeDet->class['id'];
    for($i=0, $count = count($xmlNew); $i < $count; $i++) {
$array[$code[$i]]['classId'] = $classId[$i];
    }
}
print_r($array);

第一个响应给了我大约 300,000 行,然后我必须解析它以获取产品的 id,以便发送另一个请求以获取产品的完整呈现。它最终发送了大约 40,000 个请求。我希望在晚上使用 cron 将其插入到 mySQL 数据库中,这样我就可以在第二天创建关于它的报告。有任何想法吗?谢谢!

4

1 回答 1

1

我分块做。进行第一个 API 调用并遍历它,构建一个仅包含 ID 的列表并存储它。Id 将它们存储在每行 1 个的文件中...然后您可以稍后逐行保存文件,而不是将整个数组加载到缓冲区中,或者您仍然可以将文件读取到数组中...无论哪个最终成为更好的解决方案.

然后读取文件并循环通过 ID 进行详细调用并存储它们。

更新

您还可以通过使用 xpath 查询在编译端保持对 ID 的抓取。

$xmlNew2->xpath("//THE_ELEMENT_WITH_THE_ID/@id");

但我不知道这是否会为你节省很多,因为你仍然需要循环这个......它只是节省你必须SimpleXMLElement::attributes在每个节点上调用。但结果仍然是属性元素数组。

于 2012-08-30T03:38:53.477 回答