11

我有一个数组,例如['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,但它将我的字符串键变成整数。

4

5 回答 5

22

对于“我想调用 array_map”和“$result 与 $arr 相同”的要求,请尝试:

$result = array_combine(
     array_keys($arr), 
     array_map(function($v){ return $v; }, $arr)
);

给出:

   [
     "id" => 1
     "name" => "Fred"
   ]

但是,嘿,如果你想要的只是相同的数组,那么没有什么比这段代码更好的了:

$result = $arr;
于 2019-02-06T09:07:12.077 回答
14

您将使用的最接近的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内部创建自己的功能。

于 2014-08-26T19:17:10.543 回答
2

你需要的是array_walk。试试这个代码:

$arr = array('id' => 1, 'name' => 'Fred');
array_walk(
    $arr,
    function (&$value, $key) {
        // do stuff
     }
);
print_r($arr);

不幸的是,当您尝试更改密钥时,它不起作用。但是当您通过引用传递它们时,您可以更改这些值。

如果您也必须更改密钥,请检查对array_walk-change-keys的问题和第一个答案:

于 2019-12-06T14:01:06.000 回答
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第二个参数。

于 2020-09-24T13:03:37.047 回答
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)
);
于 2020-04-26T02:45:12.027 回答