PHP如何通过自定义键数组动态获取不同API返回的多维数组值
动态嵌套取值实现方案
问题原因
你之前的写法错误原因是:PHP不会将拼接得到的['key']格式字符串自动识别为数组访问语法,当你将数组类型的$apiObject和字符串拼接时,PHP会自动将数组转为字符串Array,最终得到的只是拼接后的普通字符串,不会执行实际的取值逻辑。
最优实现方案
通过循环逐层嵌套取值,兼容任意层级的键配置,同时可添加异常判断避免键不存在时报错:
/** * 从多层嵌套的数组/对象中动态取值 * @param array|object $data 接口返回的原始数据 * @param array $keys 自定义的键路径数组(即你定义的$fees数组) * @param mixed $default 键不存在时返回的默认值 * @return mixed */ function getNestedValue($data, array $keys, $default = null) { $current = $data; foreach ($keys as $key) { // 兼容数组格式返回 if (is_array($current) && isset($current[$key])) { $current = $current[$key]; } // 兼容对象格式返回 elseif (is_object($current) && property_exists($current, $key)) { $current = $current->$key; } // 键不存在返回默认值 else { return $default; } } return $current; }
使用示例
// 3层嵌套取值 $fees = ['data', 'transaction_config', 'total_fee_amount']; $totalFee = getNestedValue($apiObject, $fees); // 2层嵌套取值 $fees = ['data', 'fee_total']; $totalFee = getNestedValue($apiObject, $fees);
上述实现支持任意层数的键配置,同时避免了eval等不安全写法的风险。
内容的提问来源于stack exchange,提问作者Jack Perry
相关产品推荐
相关产品推荐

