PHP中如何使用array_map替代foreach提取关联数组的所有键名
问题原因
默认array_map只会传入数组的值给回调函数,你原写法中回调拿到的$item是$inventory的内层值(比如['Golden Delicious', 'Granny Smith','Fuji']这种索引数组),根本获取不到外层的字符串键名Apples/Oranges,所以你在回调里调用key()、array_key_first()读取的都是内层索引数组的键,自然输出0。
调整方案
要让回调拿到外层键名,可以同时把$inventory的键数组、值数组传入array_map,回调直接返回键即可:
// 匿名函数写法 $fruits = array_map(function($key, $value) { return $key; }, array_keys($inventory), $inventory);
如果要保留你单独声明回调函数的写法,调整如下:
$fruits = array_map('fruitTypes', array_keys($inventory), $inventory); function fruitTypes($key, $item) { // 直接返回传入的外层键即可 return $key; }
运行后$fruits就是你需要的['Apples','Oranges']结构。
补充说明:如果只是为了取数组的所有键,PHP原生提供了更简洁的array_keys($inventory)方法可以直接得到结果,上述写法仅为满足你练习array_map用法的需求。
内容的提问来源于stack exchange,提问作者EastsideDev
相关产品推荐
相关产品推荐

