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

PHP如何从多维数组中批量提取nombre_ubigeo键的所有值

PHP提取JSON中指定键值的实现方案

你当前代码存在两个问题:

  • 调用json_decode时未传入第二个参数true,默认返回的是对象结构而非关联数组,无法直接通过数组键名取值
  • 仅做了一层循环,拿到的是按大区分组的省份列表数组,没有遍历到单个省份条目,自然取不到nombre_ubigeo字段

写法1:嵌套foreach循环实现(兼容性最好)

两层循环即可遍历到所有省份条目,直接按键名提取值:

// 解析JSON为关联数组
$rawData = json_decode(file_get_contents("https://raw.githubusercontent.com/joseluisq/ubigeos-peru/master/json/provincias.json"), true);
$provinceNames = [];

// 第一层遍历:拿到每个大区对应的省份分组
foreach ($rawData as $provinceGroup) {
    // 第二层遍历:拿到单个省份的详情数组
    foreach ($provinceGroup as $provinceItem) {
        // 直接按键名提取目标值存入结果数组
        $provinceNames[] = $provinceItem['nombre_ubigeo'];
    }
}

运行后$provinceNames数组就会包含全部194个省份名称。

写法2:内置函数简化实现(代码更简洁)

PHP5.5及以上版本可以用array_merge和array_column组合,无需手动写两层循环:

$rawData = json_decode(file_get_contents("https://raw.githubusercontent.com/joseluisq/ubigeos-peru/master/json/provincias.json"), true);
// 先把所有分组的省份拍平成一维数组,再批量提取nombre_ubigeo列
$provinceNames = array_column(array_merge(...$rawData), 'nombre_ubigeo');

补充说明

如果你坚持不把JSON解析为关联数组(也就是不给json_decode传第二个参数),取对象属性的写法为$provinceItem->nombre_ubigeo,功能一致但关联数组写法在批量处理字段时更方便。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:54:25