2016-09-07 98 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" 
    } 

將顏色從文本字段添加到數組中。該陣列可以是任何長度,但顏色是在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-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

它已經奏效,謝謝。但只有一件事。第一種重複的顏色是第四種顏色 - 不是第一種顏色。 –

+0

更正:重複很好,初始鍵/值順序錯誤。 –

+1

@Devrim數組索引應該從0開始,而不是從1開始。 – Barmar