2017-07-29 1 views
0
$array = ['coke.','fanta.','chocolate.']; 

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

Dieser Code hat nicht den gewünschten Effekt, in der Tat funktioniert es überhaupt nicht. Was ich tun möchte, ist, wenn ein Array-Element eine String-Länge von weniger als 5 hat, verbinden Sie es mit dem nächsten Element. Also in diesem Fall sollte das Array in diese drehen:PHP Wie Array Element mit nächsten bei der Aufrechterhaltung der Reihenfolge zusammenführen?

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

Antwort

0
<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> 
+0

Das wird nicht funktionieren, wenn das letzte Element kurz ist. Versuchen Sie '' pop'' nach ''chocolate'' hinzuzufügen und den Code – BeetleJuice

+0

auszuführen. Ich habe versucht, diesen Code zu implementieren, wusste aber nicht, dass dieses Problem vorliegt. Nicht sicher, wie Pop verwendet würde, um das zu beheben? Vielleicht ein Check, um zu sehen, ob es das letzte Element ist und wenn ja, weitermachen? – Hasen

+0

https://Stackoverflow.com/a/45386399/7498878 –

2
$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

0

Sie müssen die Iteration für die Werte überspringen, die Sie bereits hinzugefügt haben.

$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); 
+0

Wie Tejaas Patel's Antwort, schlägt dieser Code fehl, wenn das letzte Array-Element hat 'strlen <6' – BeetleJuice

+0

Ich habe nicht daran gedacht. Nun, der Korrigierte sollte die Arbeit machen. –

0

Aktualisierter Code nach dem Hinzufügen von Pop nach Schokolade.

<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> 
1

Mit 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

Verwandte Themen