唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

PHPで、ある配列の中身をn回繰り返した配列を作る

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);