php - 使用递归函数构建嵌套数组
问题描述
我得到了一个如下所示的 JSON 对象,它指向一个文件结构。包含对象的对象是文件夹,其他的对象是文件。我正在下载 URL 中的内容(对象可以变大或变小。)
{
"foo": {
"bar": "https://file-examples-com.github.io/uploads/2017/10/file_example_JPG_2500kB.jpg",
"baz": "https://sample-videos.com/img/Sample-jpg-image-100kb.jpg",
"caz": {
"zaz": "https://sample-videos.com/img/Sample-jpg-image-100kb.jpg",
"kaz": {
"haz": "https://sample-videos.com/img/Sample-jpg-image-100kb.jpg"
}
}
}
}
我正在遍历该对象并从每个键值对生成一个唯一的 id。
这是遍历对象并生成唯一 ID 的递归函数
<?php
function myRecursiveFunc($obj, &$parentId = null, &$result = [])
{
$result = [];
$fileNames = array_keys($obj);
foreach ($fileNames as $fileName) {
if (is_array($obj[$fileName])) {
$folderId = uniqueIdBuilder(); //Function that generate unique id
buildResult($result, $parentId, $folderId, true); // The function to build $result object
$parentId = $folderId;
return myRecursiveFunc($obj[$fileName], $parentId, $result);
} else {
$url = $obj[$fileName];
$fileId = uniqueIdBuilder($url);
buildResult($result, $parentId, $fileId); // The function to build $result object
}
}
return $result;
}
生成唯一 ID 部分正在工作。但是,我想构建一个结果对象来显示生成的具有确切文件结构的唯一 ID。
所以结果对象应该是这样的:
[
'fooId' => [
'barId',
'bazId',
'cazId' => [
"zazId",
"kazId" => [
"hazId"
]
]
]
我已经创建了我将在下面展示的函数,但它不起作用。
function buildResult(&$result, $parentId, $fileId, $isFolder = false)
{
if (count($result) > 0) {
foreach ($result as $key => $value) {
if (is_array($value)) {
if($key === $parentId && !$isFolder)
return $result[$parentId][] = $fileId;
if($key === $parentId && $isFolder)
return $result[$parentId][] = [$fileId => []];
buildResult($value, $parentId, $fileId);
}
}
} else {
$result[$parentId] = [];
}
}
结果不必完全像我上面提到的那样。对我来说重要的是这个结果对象包含生成的唯一 ID。
我愿意接受任何建议和帮助
编辑:
我从以下结果中得到这个结果buildResult()
:
[
"result" => [ "" => []]
]
解决方案
推荐阅读
- node.js - 是否可以将 webpack 与使用依赖注入的库一起使用?
- python - Tkinter(保存条目输入)
- javascript - 在 for 循环中指定延迟后循环
- reactjs - 页面路由更改时加载指示器不显示
- reactjs - 找不到 Babel 插件
- ios - 为什么大多数在线代码示例在符合协议功能时都使用 override 关键字?
- swift - CollectionView 上的自定义布局
- mysql - 我如何通过 ruby on rails 删除表 my.sql
- firebase - Flutter:在 Firebase Emulator 上调用 Firebase Cloud Function 时出现 PlatformException
- permissions - 如何在 Strapi 中配置角色层次结构(权限继承)?