有没有办法在 array_map 输出上命名索引?

Is there a way to have named indexes on array_map output?

我有以下代码:

array_map(
    function (ReflectionParameter $parameter){

        $paramName = $parameter->getName();

        return $this->params[$paramName];
    ,
    $this->getParametersNeededByTheConstructor()
);

它输出如下内容:

  1. [0] => 'ParamValue'
  2. [2] => 'ParamValue'
  3. [3] => 'ParamValue'
  4. [4] => 'ParamValue'
  5. [5] => 'ParamValue'

有没有办法在上面的代码中设置数组索引?例如:

  1. [paramName0] => 'ParamValue'
  2. [paramName2] => 'ParamValue'
  3. [paramName3] => 'ParamValue'
  4. [paramName4] => 'ParamValue'
  5. [paramName5] => 'ParamValue'

我不相信你可以用 array_map 做到这一点,但你可以只使用一个简单的 foreach 循环。

$params = [];
foreach ($this->getParametersNeededByTheConstructor() as $parameter) {
    $paramName = $parameter->getName();
    $params[$paramName] = $this->params[$paramName];
}

如果你的IDE没有自动检测循环变量的类型,你可以将主体包裹在一个匿名函数中

$params = [];
foreach ($this->getParametersNeededByTheConstructor() as $parameter) {
    (function(ReflectionParameter $parameter) {
        $paramName = $parameter->getName();
        $params[$paramName] = $this->params[$paramName];
    })($parameter);
}

要从您当前的数组获得预期的结果,您可以使用数组组合和 foreach 循环。
循环使用键值创建新数组,数组组合使用键作为新数组中的键,使用原始数组的值作为值。

$arr = array( 0=> 'ParamValue',
2 => 'ParamValue',
3 => 'ParamValue',
4 => 'ParamValue',
5 => 'ParamValue');

$keys =array();

Foreach($arr as $key =>$val){
    $keys[] = $val . $key;
}

$result = array_combine($keys, $arr);

Var_dump($result);

https://3v4l.org/vTWjs