PHPでクロージャ内でのカウントアップ

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)
}
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.