如何将array_map与键和值一起使用,但返回一个具有相同索引(不是int)的数组?

use*_*456 7 php arrays

我有一个像这样的数组['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);
Run Code Online (Sandbox Code Playgroud)

基本上,我希望在这种情况下$result完全相同$arr,但它会将我的字符串键变为整数.

Mar*_*cos 12

你将使用的最接近的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);
?>
Run Code Online (Sandbox Code Playgroud)

得到:

   [
     [
       "id" => 1
     ],
     [
       "name" => "Jon"
     ]
   ]
Run Code Online (Sandbox Code Playgroud)

你最好用foreach内部创建自己的功能.

  • 很好的解决方案! (2认同)

Jan*_*sen 8

对于“ $ result与$ arr相同”的要求,请尝试:

$result = array_combine(
     array_keys($arr), 
     array_map(function($v){ return $v; }, $arr)
);
Run Code Online (Sandbox Code Playgroud)

给出:

   [
     "id" => 1
     "name" => "Fred"
   ]
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个好的通用解决方案,因为转换函数无法访问当前密钥。 (3认同)