0

我想递归地查看一个名为“image”的键的嵌套 JSON 对象,并将它们的值(URL 字符串)推送到函数外部的另一个数组中。

从其他示例和 SO 问题中,我了解到我需要传递对范围外数组变量的引用,但我对 PHP 不是很好,这不起作用。

$response = json_decode('deeply nested JSON array from link below');

$preload = [];

array_walk_recursive($response, function($item, $key) use (&$preload) {
  if ($key === 'image') {
    array_push($preload, $item);
  }
});

$preload运行此函数后为空,因为$key它们都是整数,我认为它们实际上应该是 JSON 对象中的“图像”、“标题”等字符串?

这是实际的 JSON 数据:https ://pastebin.com/Q4J8e1Z6

我误解了什么?

4

1 回答 1

0

您发布的代码工作正常,尤其是回调函数的 use 子句中关于引用/别名的部分是绝对正确的。

它缺少问题中弱的 json_decode 调用的第二个参数的小细节(第一行代码),它需要设置为 true 才能使数组一直向下,以便数组上的递归遍历遍历所有预期的字段。

<?php

$buffer = file_get_contents('https://pastebin.com/raw/Q4J8e1Z6');
$response = json_decode($buffer, true);

$preload = [];

array_walk_recursive($response, function($item, $key) use (&$preload) {
    if ($key === 'image') {
        $preload[] = $item;
    }
});

print_r($preload);
于 2021-05-05T17:32:30.857 回答