首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP的array_map包含密钥

PHP的array_map包含密钥
EN

Stack Overflow用户
提问于 2012-10-24 01:40:00
回答 14查看 372K关注 0票数 269

有没有办法做到这一点:

代码语言:javascript
复制
$test_array = array("first_key" => "first_value", 
                    "second_key" => "second_value");

var_dump(array_map(function($a, $b) { return "$a loves $b"; }, 
         array_keys($test_array), 
         array_values($test_array)));

但是,直接传递$test_array变量而不是调用array_keysarray_values呢?

所需的输出为:

代码语言:javascript
复制
array(2) {
  [0]=>
  string(27) "first_key loves first_value"
  [1]=>
  string(29) "second_key loves second_value"
}
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-10-24 01:51:19

对于array_map则不是,因为它不处理键。

array_walk执行以下操作:

代码语言:javascript
复制
$test_array = array("first_key" => "first_value",
                    "second_key" => "second_value");
array_walk($test_array, function(&$a, $b) { $a = "$b loves $a"; });
var_dump($test_array);

// array(2) {
//   ["first_key"]=>
//   string(27) "first_key loves first_value"
//   ["second_key"]=>
//   string(29) "second_key loves second_value"
// }

然而,它确实改变了作为参数给定的数组,所以它不是真正的函数式编程(因为您已经将问题标记为这样)。此外,正如注释中所指出的,这只会更改数组的值,因此键不会是您在问题中指定的值。

如果您愿意,您可以编写一个函数来修复上面的点,如下所示:

代码语言:javascript
复制
function mymapper($arrayparam, $valuecallback) {
  $resultarr = array();
  foreach ($arrayparam as $key => $value) {
    $resultarr[] = $valuecallback($key, $value);
  }
  return $resultarr;
}

$test_array = array("first_key" => "first_value",
                    "second_key" => "second_value");
$new_array = mymapper($test_array, function($a, $b) { return "$a loves $b"; });
var_dump($new_array);

// array(2) {
//   [0]=>
//   string(27) "first_key loves first_value"
//   [1]=>
//   string(29) "second_key loves second_value"
// }
票数 258
EN

Stack Overflow用户

发布于 2015-05-30 05:28:00

这可能是最简短和最容易推理的:

代码语言:javascript
复制
$states = array('az' => 'Arizona', 'al' => 'Alabama');

array_map(function ($short, $long) {
    return array(
        'short' => $short,
        'long'  => $long
    );
}, array_keys($states), $states);

// produces:
array(
     array('short' => 'az', 'long' => 'Arizona'), 
     array('short' => 'al', 'long' => 'Alabama')
)
票数 188
EN

Stack Overflow用户

发布于 2020-05-05 19:49:21

代码语言:javascript
复制
$array = [
  'category1' => 'first category',
  'category2' => 'second category',
];
 
$new = array_map(function($key, $value) {
  return "{$key} => {$value}";
}, array_keys($array), $array);
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13036160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档