Php 如何使用带有键和值的数组映射,但返回具有相同索引(而不是int)的数组?
我有一个数组,比如Php 如何使用带有键和值的数组映射,但返回具有相同索引(而不是int)的数组?,php,arrays,associative-array,array-map,Php,Arrays,Associative Array,Array Map,我有一个数组,比如['id'=>1,'name'=>'Fred'] 我想在此数组上调用array\u map,并使用函数中的键。但是,当我返回时,我的键将变为int 简单的例子: $arr = array('id' => 1, 'name' => 'Fred'); $result = array_map( function ($value, $key) { return $value; }, $arr, array_keys($a
['id'=>1,'name'=>'Fred']
我想在此数组上调用array\u 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。使用数组映射()
得到的最接近的结果是:
<?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);
?>
您最好使用内部的foreach
创建自己的函数。对于“$result与$arr相同”的要求,请尝试:
给出:
[
[
"id" => 1
],
[
"name" => "Jon"
]
]
[
"id" => 1
"name" => "Fred"
]
你需要的是。
请尝试以下代码:
$arr=array('id'=>1,'name'=>'Fred');
步行街(
$arr,
函数(&$value,$key){
//做事
}
);
印刷费($arr);
不幸的是,当您尝试更改密钥时,它不起作用。但通过参照传递值时,可以更改这些值
如果您也不想更改键,请将问题检查为,第一个答案:基于@Jannie Theunissen答案获取数组映射的正确方法是使用键,以便根据第二个数组比较和分配值,例如:
$result=array\u组合(
数组_键($arr),
数组映射(函数($v,$key){return$v;},$arr,数组映射($arr))
);
或针对优化的备选方案:
$keys=array\u keys($arr);
$result=array\u组合(
$keys,
数组映射(函数($v,$key){return$v;},$arr,$keys)
);
并使用比较数组值:
$compararray=[/*与$arr结构相同,但具有特定值*/];
$keys=数组_键($arr);
$result=array\u组合(
$keys,
数组映射(函数($v,$key)使用($comparararray){
//这里可以通过传递$v和$comparararray[$key]实现递归
返回$comparararray[$key];
},$arr,$keys)
);
这个想法很简单。您需要在array_map()函数中使用键
为此,我们添加了两个数组:第一个array\u key($array)
传递主数组的键,第二个$array
是所需的数组
array_map(function($key, $value) {
// use your key here ...
return $processed_value;
}, array_keys($array), $array)
从现在起:您可以使用$key
作为第一个参数的值,使用$value
作为第二个参数。您需要显示所需的结果。这是应该的。根据文档“如果数组参数包含字符串键,那么返回的数组将包含字符串键,当且仅当恰好传递了一个数组。如果传递了多个参数,那么返回的数组始终具有整数键。”(emphasis mine)array_map()
是不适合此工作的工具。让我们看看你今天到底想做什么A.如果你能在你的解决方案中添加一些解释性的词语那就太好了,对吧。谢谢你的评论。我已经用描述更新了我的解决方案。
array_map(function($key, $value) {
// use your key here ...
return $processed_value;
}, array_keys($array), $array)