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)