2017-03-21 4 views
1

Ich habe Zeichenfolge wie 21,22,23,24,25,26,27,28,31,32,33,34,35,36,37,38 wie kann ich fügen Sie einen Zeilenumbruch nach jedem 6. Komma hinzu?Hinzufügen von Zeilenumbrüchen nach jedem 6. Komma

21,22,23,24,25,26, 
    27,28,31,32,33,34, 
    35,36,37,38 
+0

Hausaufgaben? Wenn Sie planen, zu lernen, dann sollten Sie auch angeben, was Sie versucht haben, wo Sie stecken geblieben sind. –

+0

Ihre Ausgabe unterscheidet sich von der Eingabezeichenfolge – RomanPerekhrest

Antwort

1

Die Lösung array_chunk, array_map, explode und implode Funktionen:

$s = "21,22,23,24,25,26,27,28,31,32,33,34,35,36,37,38"; 
$chunks = array_chunk(explode(",", $s), 6); 

$result = rtrim(implode(PHP_EOL, array_map(function($v) { 
    return implode(',', $v) . ','; 
}, $chunks)), ','); 

print_r($result); 

Der Ausgang:

21,22,23,24,25,26, 
27,28,31,32,33,34, 
35,36,37,38 
+0

Ihr Ansatz setzt Komma nach 38, auch Ihre Ausgabe ist falsch. @RomanPerekhrest – tufanayd

+0

@tufanayd, überprüfen Sie noch einmal, jetzt ist es in Ordnung – RomanPerekhrest

4

ein Ansatz könnte sein, die Eingabezeichenfolgen zu spalten, einzelne Gruppenteile in Stücke fester Größe und dann diese Stücke kommen zurück:

$s="21,22,23,24,25,26,27,28,31,32,33,34,35,36,37,38"; 

$arr = explode(",", $s); 
$chunks = array_chunk($arr, 6); 

$L = array(); 
foreach($chunks as $chunk){ 
    $L[] = implode(",", $chunk); 
} 
$ret = implode(",\n", $L); 
var_dump($ret); 

diese

string(49) "21,22,23,24,25,26, 
27,28,31,32,33,34, 
35,36,37,38" 

Der Code erzeugt oben kann weiter verkürzt werden als:

$arr = explode(",", $s); 
$chunks = array_chunk($arr, 6); 
$ret = implode(",\n", array_map(function($x){ return implode(",", $x);}, $chunks)); 
+0

Ihr Ansatz scheint in Ordnung, aber nach dem sechsten Komma ersetzt es das Komma durch den Zeilenumbruch. Ich muss das Komma anzeigen und den Zeilenumbruch hinzufügen. @ewcz – tufanayd

+0

@tufanayd Ich habe die Antwort geändert, um dies zu widerspiegeln ... – ewcz

0

dies die Logik ist, dass ich darüber nachdenken kann, es ignorieren, wenn seine gonna Performace beeinflussen ,

$s = "21,22,23,24,25,26,27,28,31,32,33,34,35,36,37,38"; 
    $loop = explode(",",$s); 
    $new_val = ''; 
    $counter = 1; 
    foreach($loop as $key=>$val) 
    { 
     $new_val .= $val.','; 
     if($counter % 6 ==0) 
     { 
      $new_val .= '\n'; 
     } 
     $counter++; 
    } 
    echo $new_val; 
0

Einfach mit dieser Funktion,

function insertNewline($str, $delim, $pos){ 
    return preg_replace('/((.*?'.$delim.'){'.$pos.'})/',"$1" . PHP_EOL,$str); 
} 

$x = "21,22,23,24,25,26,27,28,31,32,33,34,35,36,37,38"; 
echo insertNewline($x, ',', 6); 
Verwandte Themen