我有一个数组,例如['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
相同,但它会将我的字符串键变为整数。
答案 0 :(得分:8)
使用array_map()
最接近的是:
<?php
$arr = array('id'=>1,'name'=>'Jon');
$callback = function ($key, $value) {
return array($key => $value);
};
$arr = array_map( $callback, array_keys($arr), $arr);
var_dump($arr);
?>
给出:
[
[
"id" => 1
],
[
"name" => "Jon"
]
]
您最好使用foreach
内部创建自己的功能。
答案 1 :(得分:2)
尝试:
$result = array_combine(
array_keys($arr),
array_map(function($v){ return $v; }, $arr)
);
礼物:
[
"id" => 1
"name" => "Jon"
]
答案 2 :(得分:1)
基于@Jannie Theunissen的答案,例如,使array_map与用于基于第二个数组比较和分配值的键一起使用的正确方法是:
$result = array_combine(
array_keys($arr),
array_map(function($v, $key){ return $v; }, $arr, array_keys($arr))
);
或用于优化替代方案:
$keys = array_keys($arr);
$result = array_combine(
$keys,
array_map(function($v, $key){ return $v; }, $arr, $keys)
);
并带有比较数组值:
$compareArray = [/*same structure as $arr but with specific values*/];
$keys = array_keys($arr);
$result = array_combine(
$keys,
array_map(function($v, $key) use ($compareArray) {
// recursive can be achieved here passing $v and $compareArray[$key]
return $compareArray[$key];
}, $arr, $keys)
);
答案 3 :(得分:1)
这个想法很简单。您需要在array_map()函数中使用键。
为此,我们添加了两个数组:第一个array_keys($array)
我们传递主数组的键,第二个$array
是所需的数组。
array_map(function($key, $value) {
// use your key here ...
return $processed_value;
}, array_keys($array), $array)
从现在开始:您可以将$key
用作第一个参数的值,并将$value
用作第二个参数。
答案 4 :(得分:0)
您需要的是array_walk。 尝试以下代码:
$arr = array('id' => 1, 'name' => 'Fred');
array_walk(
$arr,
function (&$value, $key) {
// do stuff
}
);
print_r($arr);
不幸的是,当您尝试更改键时,它不起作用。但是,当您通过引用传递它们时,可以更改它们的值。
如果您也想更改键,请选中问题array_walk-change-keys和第一个答案: