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

PHP如何获取数组指定键路径字符串并支持通配符匹配取值

问题解答

针对你提出的多厂商路由器数组结构索引不一致的三个问题,答案如下:

PHP原生实现能力

PHP原生完全可以实现你需要的getpath($array, $targetKey)功能,不需要安装任何扩展。核心逻辑是递归遍历数组,逐层记录遍历路径,匹配到目标键名时返回拼接好的点分隔格式路径即可,参考实现代码:

function getpath(array $array, string $targetKey, string $currentPath = ''): ?string
{
    foreach ($array as $key => $value) {
        $newPath = $currentPath ? "{$currentPath}.{$key}" : $key;
        // 命中目标键直接返回当前路径
        if ($key === $targetKey) {
            return $newPath;
        }
        // 子元素是数组则继续递归查找
        if (is_array($value)) {
            $found = getpath($value, $targetKey, $newPath);
            if ($found !== null) {
                return $found;
            }
        }
    }
    // 没找到目标键返回null
    return null;
}

传入你的示例数组和目标键名SoftwareVersion,无论中间数字索引是0/1还是1/2,都能返回正确的点分隔路径;如果需要获取到_value的完整路径,把目标键传为_value即可。

Laravel相关支持

不需要安装第三方扩展包,Laravel自带的数组工具类已经覆盖你需要的绝大多数场景:

  • Laravel的Arr::get()方法原生支持点分隔路径读取数组值,拿到路径后可直接调用取值。
  • 你提到的忽略数字索引的通配符取值需求,Arr::get()已经原生支持,不需要提前查找路径,直接写通配符规则就能取值:
// 自动匹配DeviceInfo、SoftwareVersion下的任意数字索引,直接拿到软件版本值
$version = Arr::get($InternetGatewayDevice, 'DeviceInfo.*.SoftwareVersion.*._value');

非Laravel项目也可以单独引入Illuminate/Support组件使用这个能力,不需要安装完整框架。

原生数组通配符语法说明

PHP原生数组访问语法不支持$array['key'][*]['subkey']这类通配符写法,原生语法要求访问数组时必须传入明确存在的键名/索引。如果不想依赖第三方组件,也可以自己写几十行代码实现通配符匹配逻辑,实现成本很低。

针对TR069协议返回的网关设备数据场景,直接用通配符取值比每次先查找路径再取值的代码更简洁,适配多厂商差异的效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:12:17