我有一个数组,比如['id' => 1, 'name' => 'Fred']
。
我想在这个数组上调用array_map
,并在函数内部使用键。但是,当我返回时,我的键将变为int。
简单的例子:
$arr = array('id' => 1, 'name' => 'Fred');
$result = array_map(
function ($value, $key) {
return $value;
},
$arr,
array_keys($arr)
);
var_dump($result);
基本上,在本例中,我希望$result
与$arr
相同,但它将字符串键转换为int。
6条答案
按热度按时间kcrjzv8t1#
对于“我想调用array_map”和“$result与$arr相同”的要求,请尝试:
提供:
但是,如果你想要的只是相同的数组,那么没有什么比这段代码更好的了:
pw9qyyiw2#
使用
array_map()
最接近的结果是:提供:
你会更好地创建自己的函数,里面有一个
foreach
。ylamdve63#
你需要的是
array_walk()
。试试这个代码:不幸的是,它不能改变键,但是如果你的回调通过引用使用它们,你可以改变值。
如果你也必须改变密钥,请检查我关于reindexing with
array_walk()
的其他答案。pgky5nke4#
基于@Jannie泰尼森的答案,获得array_map的正确方法是使用key来比较和分配基于第二个数组的值,例如:
或者对于优化的替代方案:
并使用比较数组值:
a8jjtwal5#
这个想法很简单。你需要在array_map()函数中使用键。
为此,我们添加两个数组:第一个
array_keys($array)
我们传递我们的主数组的键,第二个$array
是所需的数组。从现在开始:你可以使用
$key
作为第一个参数的值,$value
作为第二个参数。egmofgnx6#
我想这不是我想出来的,但我也不记得我从哪里得到的。
这个函数是通用的,具有与
array_map()
相同的变量签名,但保留了传递的第一个数组的键,回调函数获取当前键作为第一个参数,并将值作为后续参数,如function ($k, $v, $v2, ..., $vn) {
(而array_map()
仅获取数组值)。示例:https://3v4l.org/9XQF9
这里的其他示例使用
function ($v, $k) {
作为回调签名,但它们仅限于一个输入数组,并且在接受多个输入数组时,将键放在值的中间没有意义。