为什么我的第一个值在reset()中为null?

时间:2015-03-03 03:37:29

标签: php api pdf reset

我的服务器上有一个装满书籍的目录。我编写了一个循环遍历此目录的脚本,并列出了所有位于其中的PDF文件。然后我更进一步,开始搜索谷歌书籍,并带回这些书籍的图片和描述。对于一些书籍来说这很有效,但是对于很多书籍我得到了这个错误......

  

警告:reset()期望参数1为数组,在第49行的bookDescriber.php中给出null

这是给出此错误的代码(这是一个大的foreach,它列出了目录中的所有PDF)。这段代码的最后一行是第49行。

//search GoogleBooks for a description
    $item = file_get_contents("https://www.googleapis.com/books/v1/volumes?q=$v&maxResults=1");
    $item = json_decode($item);
    $item = reset($item->items);

上面url中的$ v只是书的文件名,所以这是它会产生的链接之一,你可以看到这确实会返回信息...(如果你一直复制整个链接到maxResults = 1然后返回数据,可能有时URL中的空格不重要,有时它们会这样做?我迷失了)

https://www.googleapis.com/books/v1/volumes?q=Ajax权威指南.pdf& maxResults = 1

那么为什么我的reset()中的第一个参数设置为null ???请帮助!!

1 个答案:

答案 0 :(得分:0)

我已尝试使用该代码段,并且可以在以下情况下重新创建:

  • $ v为空白
  • 这本书不存在

如果该图书不存在,则会抛出null错误,Google会返回:

{
"kind": "books#volumes",
"totalItems": 0
}

这不足以创建数组。你最好这样做一个支票:

<?php
$item = file_get_contents("https://www.googleapis.com/books/v1/volumes?q=$v&maxResults=1");

if(is_array($item))
{
   $item = json_decode($item);
   $item = reset($item->items);
}
else
{
   return false; // echo 'no book';
}
?>