为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
守着一只汪 2022-10-22 16:51:04
我想将以下字符串拆分为 3 个字母的元素。此外,即使 inout 字符串中的字符数不能均匀分割,我也希望所有元素都有 3 个字母。10 个字符的示例字符串:$string = 'lognstring';所需的输出:$output = ['log','nst','rin','ing'];请注意如何in第二次使用 inout 字符串中的后期来使最后一个元素“全长”。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

希望这对您有所帮助。


$str = 'lognstring';

$arr = str_split($str, 3);


$array1= $arr;

array_push($array1,substr($str, -3));

print_r($array1);


查看完整回答
反对 回复 2022-10-22
?
叮当猫咪

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"

}

 */


查看完整回答
反对 回复 2022-10-22
?
芜湖不芜

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

    )

);


查看完整回答
反对 回复 2022-10-22
  • 3 回答
  • 0 关注
  • 59 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信