php - 如何在 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 )
)
*/
解决方案
以下情况如何:
$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
)
推荐阅读
- sql-server - SSIS 参数化映射
- python - Python TypeError:预期的字符串或类似字节的对象
- tcp - 在跨域环境中通过 tcp 配置传输级别安全性
- c - 如何使用 Windows 中的系统调用从 C 中打开图像?
- python - 多次更改输入框的显示
- ruby - ruby whois gem的whois服务设置地址
- google-play - READ_PHONE_STATE 的问题
- video - Flutter - video_player 全屏
- android - 在 Android 中在此服务中上传数据的最佳服务启动类型是什么
- angular - 如何以角度动态分配模板引用变量