将值放在 array_walk_recursive() 之外的数组中

Put values in array outside of array_walk_recursive()

我想通过嵌套的 JSON 对象递归地查找名为 'image' 的键,并将它们的值(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 都是整数,而它们实际上应该是像 'image'、'title' 这样的字符串等来自 JSON 对象,我想?

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

我误会了什么?

您发布的代码运行良好,尤其是回调函数的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);