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


Why is my first value in reset() null?

我有一个服务器,里面有一个装满书的目录。我写了一个脚本,它在这个目录中循环,列出了里面的所有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权威指南;最大结果=1

那么,为什么我的reset()中的第一个参数被设置为null???救命!!

我已经用这个片段进行了测试,如果:

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

如果这本书不存在,就会抛出null错误,谷歌会返回:

{
"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';
}
?>