猿问

在每个第 n 个字符处拆分一个字符串,并确保所有段字符串具有相同的长度

我想将以下字符串拆分为 3 个字母的元素。此外,即使 inout 字符串中的字符数不能均匀分割,我也希望所有元素都有 3 个字母。

10 个字符的示例字符串:

$string = 'lognstring';

所需的输出:

$output = ['log','nst','rin','ing'];

请注意如何in第二次使用 inout 字符串中的后期来使最后一个元素“全长”。


守着一只汪
浏览 88回答 3
3回答

慕姐4208626

希望这对您有所帮助。$str = 'lognstring';$arr = str_split($str, 3);$array1= $arr;array_push($array1,substr($str, -3));print_r($array1);

叮当猫咪

$str = 'lognstring';$chunk = 3;$arr = str_split($str, $chunk); //["log","nst","rin","g"]if(strlen(end($arr)) < $chunk)&nbsp; //if last item string length is under $chunk&nbsp; &nbsp; $arr[count($arr)-1] = substr($str, -$chunk);&nbsp; //replace last item to last $chunk size of $strprint_r($arr);/**array(4) {&nbsp; [0]=>&nbsp; string(3) "log"&nbsp; [1]=>&nbsp; string(3) "nst"&nbsp; [2]=>&nbsp; string(3) "rin"&nbsp; [3]=>&nbsp; string(3) "ing"}&nbsp;*/

芜湖不芜

与之前发布的答案不同,这些答案会爆炸字符串str_split()然后返回并在需要时清除最后一个元素,我将演示一种技术,该技术将在一次干净的传递中填充子字符串数组。要有条件地减少最后一次迭代的起点,请使用三元条件或min().&nbsp;我更喜欢min().代码:(演示)$string = 'lognstring';$segmentLength = 3;$totalLength = strlen($string);for ($i = 0; $i < $totalLength; $i += $segmentLength) {&nbsp; &nbsp; $result[] = substr($string, min($totalLength - $segmentLength, $i), $segmentLength);}var_export($result);输出:array (&nbsp; 0 => 'log',&nbsp; 1 => 'nst',&nbsp; 2 => 'rin',&nbsp; 3 => 'ing',)或者,您可以在拆分之前(而不是之后)准备字符串。代码:(演示)$extra = strlen($string) % $segmentLength;var_export(&nbsp; &nbsp; str_split(&nbsp; &nbsp; &nbsp; &nbsp; $extra&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ? substr($string, 0, -$extra) . substr($string, -$segmentLength)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : $string,&nbsp; &nbsp; &nbsp; &nbsp; $segmentLength&nbsp; &nbsp; ));
随时随地看视频慕课网APP
我要回答