かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP array_map でインデックスを使いたい

PHP の配列操作で array_map を使う時に index を使う方法

array_map のコールバック変数に index の配列を渡す

array_map(?callable $callback, array $array, array ...$arrays): array
array_map() returns an array containing the results of applying the callback to the corresponding value of array (and arrays if more arrays are provided) used as arguments for the callback. The number of parameters that the callback function accepts should match the number of arrays passed to array_map(). Excess input arrays are ignored. An ArgumentCountError is thrown if an insufficient number of arguments is provided.
cf. PHP: array_map - Manual

array_map のコールバック関数は第2引数以降の配列の値を順番に引数に取るので、第2引数に実際の配列、第3引数に range を使って作成したインデックスの配列を渡せば良い

<?php
$array = ['紅林珠璃', '天羽まどか', '黒沢凛'];

$result = array_map(function($value, $index) {
  return $index . '. ' . $value;
}, $array, range(1, count($array)));

var_dump($result);

👇

array(3) {
  [0]=>
  string(15) "1. 紅林珠璃"
  [1]=>
  string(18) "2. 天羽まどか"
  [2]=>
  string(12) "3. 黒沢凛"
}

ポイントは range の初期値を 1 にすることで index を 1 始まりにできる
0 からの値が欲しい場合は第3引数を range(0, count($array) - 1) とするかコールバック内で $index - 1 とするか

JavaScript ばかり触ってるから PHP は感覚が違ってムズぃ…
おわり


[参考]

バニラチリペッパー大好き〜