PHP 的 array_map 包括键

2022-01-02 00:00:00 functional-programming php

有没有办法做这样的事情:

Is there a way of doing something like this:

$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)));

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

But instead of calling array_keys and array_values, directly passing the $test_array variable?

所需的输出是:

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

推荐答案

不使用 array_map,因为它不处理键.

Not with array_map, as it doesn't handle keys.

array_walk:

$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"
// }

它确实改变了作为参数给出的数组,所以它不完全是函数式编程(因为你有这样标记的问题).此外,正如评论中所指出的,这只会更改数组的值,因此键不会是您在问题中指定的键.

It does change the array given as parameter however, so it's not exactly functional programming (as you have the question tagged like that). Also, as pointed out in the comment, this will only change the values of the array, so the keys won't be what you specified in the question.

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

You could write a function that fixes the points above yourself if you wanted to, like this:

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"
// }

相关文章