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

传递数组元素给函数时,能否保留并访问其原键?

问题与解答

问题场景

给定PHP数组:

$food = [
    'meat' => ['beef','chicken'],
    'veg' => ['salad','onions'],
];

以及函数:

function foo($a) {
    print key($a);
}

调用foo($food['meat'])时,输出的是0而非预期的meat,想知道是否能不通过添加额外参数的方式,直接在函数内部访问到该子数组在原父数组中的键。

原因说明

当你传递$food['meat']给foo函数时,本质上传递的是这个子数组本身——它是一个索引数组,自身的键是0和1,key()函数获取的是当前数组指针指向的键(默认指向第一个元素,所以返回0)。这个子数组并不会携带它在父数组$food中的键meat的任何信息,两者在内存中是独立的结构。

结论与替代方案

没有办法直接从子数组反向获取它在原父数组中的键,因为PHP不会自动为子数组保存这类关联信息。

最直接的解决方案还是给函数添加额外参数传递原键:

function foo($a, $parentKey) {
    print $parentKey; // 这里会输出'meat'
}

foo($food['meat'], 'meat');

如果是遍历父数组的场景,可以更便捷地传递键值对:

foreach ($food as $key => $item) {
    foo($item, $key);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:24:52