首页 > 解决方案 > 如何在 PHP 中使用 array_map() 修改索引键

问题描述

我想使用array_map()或任何 PHP array_ * 内置函数从下面$desired_output的给定$data数组中得出。知道怎么做吗?

$data = array(
  'posted_name' => 'John Doe',
  'posted_age'  => '30',
);

$desired_output = array(
  'name' => 'John Doe',
  'age'  => '30',
);

我在下面尝试过,但结果是一个数组数组:


$desired_output  = array_map(
    function($keys, $vals)
        {
            $new[substr($keys, strlen('posted_'))] = $vals;
            return $new;
    },
    array_keys($data),
    $data
);

print_r($desired_output );

/**
* Array (
  [0] => Array ( [name] => John Doe )
  [1] => Array ( [age] => 30 )
)
*/

标签: php

解决方案


以下情况如何:


$desired_output = array();
array_walk(
    $data,
    function(&$val, $key) use (&$desired_output)
    {
      $len = strlen('posted_');
      if (substr($key, 0, $len) == "posted_") {
        $key = substr($key, $len);
      }
      $desired_output[$key] = $val;
    }
);

print_r($desired_output);

变化:

  • 使用array_walk而不是array_map因为 _map 无法处理键
  • 创建一个空数组来构建结果
  • 在 lambda 函数的范围内使用该数组
  • 仅当键中存在“posted_”时才替换它

输出:

$ php -f ~/tmp/so2.php

Array
(
    [name] => John Doe
    [age] => 30
)

推荐阅读