php - Repeat array values

2020-04-23 05:43发布

I have an array;

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

The colour is added to the array from a text field. The array could be any length but the colour is at a fixed length of 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);

What I want to achieve is, if the length of the array is more than 4, then repeat the colours (1-4).

Desired result:

[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...

标签: php arrays
1条回答
够拽才男人
2楼-- · 2020-04-23 06:28

Use the modulus operator to rotate through the colours array.

$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];
}
查看更多
登录 后发表回答