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
相关产品推荐
相关产品推荐

