You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP四级多维关联数组检索:根据Link字段返回Title及Access信息

四级多维关联数组的Link检索实现

需求说明

给定四级多维关联数组,实现检索功能:当指定Link字段值存在时,返回对应的Title及该条Access下的完整信息。

示例数组结构

假设你的数组结构如下(可根据实际键名调整大小写,比如Link/Title):

$userAccess = [
    'module1' => [
        'sectionA' => [
            'title' => '用户管理',
            'access' => [
                ['link' => '/user/list', 'name' => '用户列表', 'permission' => 'read'],
                ['link' => '/user/add', 'name' => '添加用户', 'permission' => 'write']
            ]
        ],
        'sectionB' => [
            'title' => '权限管理',
            'access' => [
                ['link' => '/permission/assign', 'name' => '分配权限', 'permission' => 'write'],
                ['link' => '/user/list', 'name' => '查看用户权限', 'permission' => 'read']
            ]
        ]
    ],
    'module2' => [
        'sectionC' => [
            'title' => '系统设置',
            'access' => [
                ['link' => '/system/config', 'name' => '配置修改', 'permission' => 'admin']
            ]
        ]
    ]
];

检索函数实现

针对四级结构编写的遍历检索函数,支持匹配多个符合条件的条目:

function searchUserAccess($accessData, $targetLink) {
    $result = [];
    
    // 遍历一级模块节点
    foreach ($accessData as $module) {
        // 遍历二级分区节点
        foreach ($module as $section) {
            // 跳过无access数组的节点
            if (!isset($section['access']) || !is_array($section['access'])) {
                continue;
            }
            // 遍历每个access条目
            foreach ($section['access'] as $accessItem) {
                // 匹配目标link(全等匹配,可根据需求改为模糊匹配)
                if (isset($accessItem['link']) && $accessItem['link'] === $targetLink) {
                    $result[] = [
                        'title' => $section['title'] ?? '无标题',
                        'access' => $accessItem
                    ];
                }
            }
        }
    }
    
    return $result;
}

调用示例

// 检索link为'/user/list'的条目
$searchResult = searchUserAccess($userAccess, '/user/list');

// 输出结果
print_r($searchResult);

输出结果

Array
(
    [0] => Array
        (
            [title] => 用户管理
            [access] => Array
                (
                    [link] => /user/list
                    [name] => 用户列表
                    [permission] => read
                )

        )

    [1] => Array
        (
            [title] => 权限管理
            [access] => Array
                (
                    [link] => /user/list
                    [name] => 查看用户权限
                    [permission] => read
                )

        )

)

注意事项

  1. 键名大小写:如果你的数组中字段是大写(如Link/Title),请将代码中的'link'/'title'对应修改为大写键名。
  2. 匹配规则:当前使用===精确匹配,若需要模糊匹配,可替换为strpos($accessItem['link'], $targetLink) !== false。
  3. 容错处理:代码中加入了isset()和??运算符,避免因节点缺失title或access字段导致报错。

通用递归版本(适配任意层级)

如果后续数组层级可能变化,可使用递归函数实现更灵活的检索:

function searchUserAccessRecursive($data, $targetLink) {
    $result = [];
    
    foreach ($data as $item) {
        // 识别包含title和access的节点
        if (isset($item['title'], $item['access']) && is_array($item['access'])) {
            foreach ($item['access'] as $access) {
                if (isset($access['link']) && $access['link'] === $targetLink) {
                    $result[] = [
                        'title' => $item['title'],
                        'access' => $access
                    ];
                }
            }
        }
        // 递归遍历嵌套数组
        elseif (is_array($item)) {
            $result = array_merge($result, searchUserAccessRecursive($item, $targetLink));
        }
    }
    
    return $result;
}

内容的提问来源于stack exchange,提问作者Raymond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:45:35