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

如何获取stdClass Object中distance的value值?代码异常求解

如何从Distance Matrix API返回的对象中提取distance的value值?

首先看你给出的var_dump结构,这是Google Maps Distance Matrix API的典型返回结构,先明确核心数据层级:

object(stdClass)#35 (4) {
  ["destination_addresses"]=> array(1) { ... }
  ["origin_addresses"]=> array(1) { ... }
  ["rows"]=> array(1) {
    [0]=> object(stdClass)#36 (1) {
      ["elements"]=> array(1) {
        [0]=> object(stdClass)#37 (3) {
          ["distance"]=> object(stdClass)#38 (2) {
            ["text"]=> string(7) "25.2 km"
            ["value"]=> int(25195) // 这就是你要的目标值
          }
          ...
        }
      }
    }
  }
  ["status"]=> string(2) "OK"
}

先分析你三种方法的问题:

  • 遍历对象赋值无输出
    你的foreach($distancedecoded as $route)是遍历顶层的4个属性(destination_addresses、origin_addresses、rows、status),$route会依次是数组、数组、对象、字符串。只有当$route指向rows时,它本身还是数组,不是直接带elements属性的对象,所以$route->elements根本不存在,循环里的赋值完全无效。

  • 直接索引取值无效
    首先$route这个变量你根本没定义过;其次就算用原对象$distancedecoded,rows是索引为0的数组,不是索引2,$distancedecoded->rows[2]本身就不存在,自然取不到值。

  • 转为数组遍历出现非法字符串偏移
    转为数组后,foreach($distancedecoded as $route)还是遍历顶层的四个键值对,比如第一次循环$route是destination_addresses对应的数组(只有索引0的元素),你直接取$route[2]就会触发非法偏移警告——这个数组根本没有索引2的元素,后续的['elements']等自然也都是错误的。


正确的取值方法

根据数据层级,我们需要逐层定位到目标值,分两种常用方式:

方式1:直接使用对象访问(不转数组)

// 假设$distancedecoded是你var_dump里的原对象
$distanceValue = $distancedecoded->rows[0]->elements[0]->distance->value;
echo $distanceValue; // 输出:25195

逻辑拆解:

  1. $distancedecoded->rows是包含1个元素的数组,取第一个元素[0]
  2. 这个元素是包含elements属性的对象,elements也是包含1个元素的数组,取第一个元素[0]
  3. 最后访问这个元素的distance对象,取它的value属性

方式2:转为数组后访问

如果你习惯用数组操作,转为数组后按照数组层级取值:

$distancedecoded = json_decode($getdistance, true); // 第二个参数传true转为关联数组
$distanceValue = $distancedecoded['rows'][0]['elements'][0]['distance']['value'];
echo $distanceValue; // 输出:25195

逻辑和对象访问完全一致,只是把->换成数组的[]访问方式。

如果担心数据可能有多个rows或elements(比如多起点/终点场景),可以加一层循环遍历所有可能的结果:

// 对象方式遍历所有有效distance value
foreach($distancedecoded->rows as $row) {
    foreach($row->elements as $element) {
        if($element->status === 'OK') { // 确保该段路线请求成功
            echo $element->distance->value . '<br>';
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:23:35