PHP:我可以在 array_map 函数中获取索引吗?

新手上路,请多包涵

我在 php 中使用这样的地图:

 function func($v) {
    return $v * 2;
}

$values = array(4, 6, 3);
$mapped = array_map(func, $values);
var_dump($mapped);

是否可以在函数中获取值的索引?

另外 - 如果我正在编写需要索引的代码,我应该使用 for 循环而不是 map 吗?

原文由 Ollie Glass 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 775
2 个回答

当然可以,借助 array_keys():

 function func($v, $k)
{
    // key is now $k
    return $v * 2;
}

$values = array(4, 6, 3);
$mapped = array_map('func', $values, array_keys($values));
var_dump($mapped);

原文由 Aron Rotteveel 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如之前发布的答案所提到的,当回调函数的主体中需要键和值时,最简单的方法是传入键数组,然后通过原始数组访问这些键的值。

对于没有箭头功能的旧版本,请使用 use()global (我推荐前者)以允许从回调中访问原始数组。

对于现代 PHP (7.4+),使用箭头函数语法。 ( 演示

 $values = [4, 6, 3];
var_export(
    array_map(
        fn($k) => "$k: " . $values[$k] * 2,
        array_keys($values)
    )
);


使用 foreach() 并通过引用修改值也没有什么可耻的。 ( 演示

 $values = [4, 6, 3];
foreach ($values as $k => &$v) {
    $v = "$k: " . $v * 2;
}
var_export($values);

原文由 mickmackusa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题