2016-09-07 15 views
1

私は配列を持っています。php - 配列の値を繰り返します。

[1]=> 
    array(5) { 
    ["chid"]=> 
     string(1) "1" 
    ["chtext"]=> 
     string(9) "Excellent" 
    ["chvotes"]=> 
     string(2) "13" 
    ["weight"]=> 
     string(1) "1" 
    ["colour"]=> 
     string(7) "#b3c7e0" 
    } 

色はテキストフィールドから配列に追加されます。 1-4(配列の長さは任意でしたが、色は4

$poll = $entity->choice; // Array 
$poll_colours = array(); // Create new array for colours 
$colours = $entity->field_poll_colours['und'][0]['value']; // Get value from text field 
$poll_colours = explode(',', $colours); // Explode from comma 

foreach($poll as $key => $value) { 
    $poll[$key]['colour'] = $poll_colours[0]; 
    $poll[$key]['colour'] = ltrim($poll[$key]['colour']); 
    unset($poll_colours[0]); 
    sort($poll_colours); 
} 
unset($poll_colours); 

配列の長さは、その後の色を繰り返し、4つ以上であれば何を達成したいことは、ある一定の長さであります)。

所望の結果:

[1]=> 
    array(5) { 
    ["chtext"]=> "A" 
    ["colour"]=> "Cyan" 
    } 
[2]=> 
    array(5) { 
    ["chtext"]=> "B" 
    ["colour"]=> "Magenta" 
    } 
[3]=> 
    array(5) { 
    ["chtext"]=> "C" 
    ["colour"]=> "Yellow" 
    } 
[4]=> 
    array(4) { 
    ["chtext"]=> "D" 
    ["colour"]=> "Black" 
    } 
[5]=> 
    array(5) { 
    ["chtext"]=> "E" 
    ["colour"]=> "Cyan" // Repeat colour[1] 
    } 
[6]=> 
    array(5) { 
    ["chtext"]=> "F" 
    ["colour"]=> "Magenta" // Repeat colour[2] 
    } 
... // Repeat colour[3] 
... // Repeat colour[4] 
... // Repeat colour[1] etc... 

答えて

2

色アレイを介して回転するモジュラス演算子を使用します。

$colour_count = count($poll_colours); 
$poll_colours = array_map('ltrim', $poll_colours); 
sort($poll_colours); 
foreach($poll as $key => $value) { 
    $poll[$key]['colour'] = $poll_colours[$key % $colour_count]; 
} 
+0

ご協力いただきありがとうございます。しかしただ一つのこと。最初の繰り返し色は4番目の色です。最初の色ではありません。 –

+0

訂正:繰り返しは問題ありません。最初のキー/値の順序が間違っています。 –

+1

@Devrim配列インデックスは1ではなく0から開始します。 – Barmar

関連する問題