2016-09-07 73 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