static変数を使用する
static変数の初期化が最初の一回だけ実行される仕組みを利用します。
当たり前かと思いますが、クロージャだとクロージャ内スコープのみで有効の様子
$test_list = range(10, 15);
$result_list = array_map(function ($value) {
static $index = 0;
var_dump($index);
return $index++;
}, $test_list);
var_dump($index);
var_dump($result_list);
int(0)
int(1)
int(2)
int(3)
int(4)
Notice: Undefined variable
Null
array(6) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
[5]=>
int(5)
}
参照渡しでカウンターを渡す
$test_list = range(10, 15);
$index = 0;
$result_list = array_map(function ($value) use (&$index) {
var_dump($index);
return $index++;
}, $test_list);
var_dump($result_list);
int(0)
int(1)
int(2)
int(3)
int(4)
int(5)
array(6) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
[5]=>
int(5)
}