PHP如何在保持顺序的同时将数组元素与下一个合并?

$array = ['coke.','fanta.','chocolate.'];

foreach ($array as $key => $value) {
  if (strlen($value)<6) {
      $new[] =  $value." ".$array[$key+1];
  } else {
      $new[] = $value;
  }
}

This code doesn't have the desired effect, in fact it doesn't work at all. What I want to do is if an array element has string length less than 5, join it with the next element. So in this case the array should turn into this:

$array = ['coke. fanta.','chocolate.'];
<pre>
$array = ['coke.','fanta.','chocolate.'];
print_r($array);
echo "<pre>";
$next_merge = "";
foreach ($array as $key => $value) {
    if($next_merge == $value){
        continue;
    }
    if (strlen($value)<6) {
        $new[] =  $value." ".$array[$key+1];
        $next_merge = $array[$key+1];
    } else {
        $new[] = $value;
    }
}
print_r($new);
</pre>
$array = ['coke.','fanta.','chocolate.', 'candy'];
$new = [];

reset($array); // ensure internal pointer is at start
do{
    $val = current($array); // capture current value
    if(strlen($val)>=6):
        $new[] = $val; // long string; add to $new

    // short string. Concatenate with next value
    // (note this moves array pointer forward)
    else:
        $nextVal = next($array) ? : '';
        $new[] = trim($val . ' ' . $nextVal);
    endif;

}while(next($array));

print_r($new); // what you want

Live demo

You need to skip the iteration for the values that you have already added.

$array = ['coke.', 'fanta.', 'chocolate.'];
$cont = false;

foreach ($array as $key => $value) {
    if ($cont) {
        $cont = false;
        continue;
    }

    if (strlen($value) < 6 && isset($array[$key+1])) {
        $new[] = $value.' '.$array[$key+1];
        $cont = true;
    }
    else {
        $new[] = $value;
    }
}
print_r($new);

Updated Code after adding pop after chocolate.

<pre>
$array = ['coke.','fanta.','chocolate.','pop'];
print_r($array);
echo "<br>";
$next_merge = "";
foreach ($array as $key => $value) {
    if($next_merge == $value){
        continue;
    }
    if (strlen($value)<6 && !empty($array[$key+1])) {
        $new[] =  $value." ".$array[$key+1];
        $next_merge = $array[$key+1];
    } else {
        $new[] = $value;
    }
}
print_r($new);
<pre>

With array_reduce:

$array = ['coke.', 'fanta.', 'chocolate.', 'a.', 'b.', 'c.', 'd.'];

$result = array_reduce($array, function($c, $i) {
    if ( strlen(end($c)) < 6 )
        $c[key($c)] .= empty(current($c)) ? $i : " $i";
    else
        $c[] = $i;
    return $c;
}, ['']);


print_r($result);

demo