2017-03-21 41 views
1

我有類似於的字符串21,22,23,24,25,26,27,28,31,32,33,34,35,36,37,38我該怎麼辦每6個逗號後添加一個換行符?每隔6個逗號加入換行符

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

作業?如果你打算學習,那麼你也應該提供你已經嘗試過的地方,你被困在哪裏。 –

+0

您的輸出與輸入字符串不同 – RomanPerekhrest

回答

1

使用array_chunkarray_mapexplodeimplode函數的溶液:

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

輸出:

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

您的方法在38之後也輸入逗號,您的輸出是錯誤的。 @RomanPerekhrest – tufanayd

+0

@tufanayd,再次檢查,現在沒關係 – RomanPerekhrest

4

一個方法可以是分割輸入串,組單個零件到固定大小的塊,然後再加入這些塊回:

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

這產生

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

的代碼以上可以進一步縮短爲:

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

您的方法似乎沒問題,但是在第六個逗號之後,它會用換行符替換逗號。我需要顯示逗號並添加換行符。 @ewcz – tufanayd

+0

@tufanayd我修改了答案來反映這個...... – ewcz

0

這是我能想到關於它的邏輯, 忽略它,如果它去影響服務表現,

$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

只需使用此功能,

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);