2016-11-12 6 views
1

たとえば、4つの色の名前があり、9個のアイテムを持つ配列に追加したいとします。ここで私がしたい配列の単純な形式です:PHPで指定された文字列の配列を生成する最速の方法は?

$colors = array 
(
"blue", 
"blue", 
"green", 
"green", 
"red", 
"red", 
"brown", 
"brown", 
"brown" 
} 

は、しかし、私は唯一のちょうどこのような最後の配列を取得し、変数や色の配列を与えたい:実装する

$const = array { 
"blue", 
"green", 
"red" 
}; 

$len = 9; 

1つの方法この関数はいくつかの基本的な計算でforループを使用することですが、状況によっては時間がかかりすぎます。たとえば、150個の入力と999個のアイテムでこのような配列を作成したいとします。だから、この関数を実装するには最高の(または組み込みのPHP関数)は何ですか?

+1

実際に何をしようとしているのかはっきりしていません。あなたがやっていることとあなたが望む結果を説明する別の試みをしてください – RiggsFolly

答えて

1

あなたの質問を完全に理解しているかどうかはわかりません。しかし、あなたの入力($constと)&出力($colors)に基づいて、私はあなたの考えを得るかもしれません。ここでは色の配列を生成する機能があります:

function generateColorArray(array $colors, $length) { 
    $totalColors = count($colors); 

    if ($totalColors === 0 || $length <= 0) { 
     return []; 
    } 

    $colorArray = []; 
    $colorBlockSize = (int) floor($length/$totalColors); 
    $totalRemainder = $length % $totalColors; 

    if ($colorBlockSize === 0) { 
     return array_slice($colors, 0, $length); 
    } 

    foreach ($colors as $color) { 
     $colorArray = array_merge($colorArray, array_fill(0, $colorBlockSize, $color)); 
    } 

    if ($totalRemainder > 0) { 
     $colorArray = array_merge($colorArray, array_fill(0, $totalRemainder, $colors[$totalColors - 1])); 
    } 

    return $colorArray; 
} 

あなたは色の以下のリストから9の長さと色の配列を生成したいとしましょう:

あなたが使用することができますgenerateColorArray()機能の上に色の配列を生成します。

$collorArray = generateColorArray($colors, 9); 

// The result would be: 
Array 
(
    [0] => blue 
    [1] => blue 
    [2] => green 
    [3] => green 
    [4] => red 
    [5] => red 
    [6] => brown 
    [7] => brown 
    [8] => brown 
) 

与え$lengthパラメータはの合計数よりも小さい場合に起こる何か?上記の機能は、このような状況処理します:

$collorArray = generateColorArray($colors, 3); 

// The result would be: 
Array 
(
    [0] => blue 
    [1] => green 
    [2] => red 
) 

をそして、あなたは$colorsまたは$length値ゼロ以下の空の配列を渡すとき、関数は単に空の配列を返します。

このヘルプが必要です。

関連する問題