0

我正在使用 OpenLibrary.org 制作的一些 json,并从信息中重新制作一个新数组。 链接到 OpenLibrary json

这是我解码 json 的 PHP 代码:

$barcode = "9781599953540";

function parseInfo($barcode) {
    $url = "http://openlibrary.org/api/books?bibkeys=ISBN:" . $barcode . "&jscmd=data&format=json";
    $contents = file_get_contents($url); 
    $json = json_decode($contents, true);
    return $json;
}

我正在尝试制作的新数组看起来像这样:

$newJsonArray = array($barcode, $isbn13, $isbn10, $openLibrary, $title, $subTitle, $publishData, $pagination, $author0, $author1, $author2, $author3, $imageLarge, $imageMedium, $imageSmall);

但是当我尝试获取 ISBN_13 以将其保存到 $isbn13 时,出现错误:

Notice: Undefined offset: 0 in ... on line 38 
// Line 38
$isbn13 = $array[0]['identifiers']['isbn_13'];

即使我尝试 $array[1] ,[2], [3].... 我也会得到同样的结果。我在这里做错了什么!OI 知道我的 Valuable 名称可能不一样,那是因为它们的功能不同。

谢谢你的帮助。

4

1 回答 1

2

您的数组不是由整数索引,而是由 ISBN 编号索引:

Array
(
    // This is the first level of array key!
    [ISBN:9781599953540] => Array
        (
            [publishers] => Array
                (
                    [0] => Array
                        (
                            [name] => Center Street
                        )

                )

            [pagination] => 376 p.
            [subtitle] => the books of mortals
            [title] => Forbidden
            [url] => http://openlibrary.org/books/OL24997280M/Forbidden
            [identifiers] => Array
            (
                [isbn_13] => Array
                    (
                        [0] => 9781599953540
                    )

                [openlibrary] => Array
                    (
                        [0] => OL24997280M
                    )

因此,您需要通过第一个 ISBN 调用它,并且键isbn_13本身就是一个数组,您必须按元素访问它:

// Gets the first isbn_13 for this item:
$isbn13 = $array['ISBN:9781599953540']['identifiers']['isbn_13'][0];

或者,如果您需要对其中许多进行循环:

foreach ($array as $isbn => $values) {
  $current_isbn13 = $values['identifiers']['isbn_13'][0];
}

如果您每次只期望一个并且必须能够在不提前知道它的情况下获得它的密钥但不想要一个循环,您可以使用array_keys()

// Get all ISBN keys:
$isbn_keys = array_keys($array);
// Pull the first one:
$your_item = $isbn_keys[0];
// And use it as your index to $array
$isbn13 = $array[$your_item]['identifiers']['isbn_13'][0];

如果你有 PHP 5.4,你可以通过数组取消引用跳过一个步骤!:

// PHP >= 5.4 only
$your_item = array_keys($array)[0];
$isbn13 = $array[$your_item]['identifiers']['isbn_13'][0];
于 2012-07-15T14:17:30.393 回答