1. ホーム
  2. php

[解決済み】キーを含むPHPのarray_map

2022-03-31 11:19:36

質問

このような方法はありますか?

$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 という変数がありますか?

希望する出力は。

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

解決方法は?

array_mapはキーを扱えないのでダメです。

配列ウォーク が行います。

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

しかし、これはパラメータとして与えられた配列を変更するので、正確には関数型プログラミングではありません(質問にはそのようなタグが付けられています)。また、コメントで指摘されているように、これは配列の値のみを変更するので、キーは質問で指定されたものにはなりません。

上記の点を修正する関数を自分で書こうと思えば、こんな風に書けるはずです。

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