3 回答

TA贡献1852条经验 获得超7个赞
希望这对您有所帮助。
$str = 'lognstring';
$arr = str_split($str, 3);
$array1= $arr;
array_push($array1,substr($str, -3));
print_r($array1);

TA贡献1776条经验 获得超12个赞
$str = 'lognstring';
$chunk = 3;
$arr = str_split($str, $chunk); //["log","nst","rin","g"]
if(strlen(end($arr)) < $chunk) //if last item string length is under $chunk
$arr[count($arr)-1] = substr($str, -$chunk); //replace last item to last $chunk size of $str
print_r($arr);
/**
array(4) {
[0]=>
string(3) "log"
[1]=>
string(3) "nst"
[2]=>
string(3) "rin"
[3]=>
string(3) "ing"
}
*/

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