传递数组元素给函数时,能否保留并访问其原键?
问题与解答
问题场景
给定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
相关产品推荐
相关产品推荐

