【问题标题】:Why is my first value in reset() null?为什么我在 reset() 中的第一个值是 null?
【发布时间】:2015-03-03 03:37:28
【问题描述】:

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

警告:reset() 期望参数 1 为数组,在 bookDescriber.php 第 49 行给出 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 ???请帮忙!!

【问题讨论】:

  • 尝试var_dump($item)var_dump($item->items) 并显示输出。而对于空格,为什么不事先尝试用+ 替换它们呢?

标签: php api pdf reset


【解决方案1】:

我已经用这个 sn-p 进行了测试,如果满足以下条件,它可以重新创建:

  • $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';
}
?> 

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2016-11-05
    • 2020-06-18
    相关资源
    最近更新 更多