PythonやRubyだと[1, 2] * 3
と書くと[1, 2]
を3回繰り返した配列[1, 2, 1, 2, 1, 2]
が得られます
これをPHPで簡単に書く方法がないか考えてみました
二重のforループで配列に足していく方法
最初に自明な方法の二重のforループで足していく方法を書いておきます
この書き方はおそらく処理的には一番効率的なコードだと思いますが、他言語の[1, 2] * 3
みたいなのと比べると書くのが微妙にめんどくさいです(関数にして、配列ではなくyield
でジェネレータを返してもよさそう)
<?php $arr = [1, 2]; $n_repeat = 3; $result = []; for ($i = 0; $i < $n_repeat; $i++) { foreach ($arr as $v) { $result[] = $v; } } var_dump($result);
array_fill
を使う方法
今回考えた方法です
array_fill
で元の配列をn個要素として持つ配列の配列[[1, 2], [1, 2], ...]
を作って、それをarray_merge
で平らにして1段階の配列に変えます
タイプ数的には減っていますが、わかりづらくなってしまった気もします(特にarray_fill
の引数が少し覚えづらいです)
<?php $arr = [1, 2]; $n_repeat = 3; $result = array_merge(...array_fill(0, $n_repeat, $arr)); var_dump($result);