字符串到数组,最大长度,单词中断


string to array, max length, break on words

我有一个字符串,我想把它分解成一个数组。

每个数组都需要有一个固定的长度,比如说,45个字符。

每个断点都需要基于单词,而不是字符(因此,永远不会超过45,但如果使用长字符单词,则可能在30英寸范围内)

那么,让我们取这个字符串

$content = 'Sed a suscipit enim in consectetur lacus Vestibulum efficitur convallis luctus Curabitur vehicula a massa nec pretium Sed a maximus nunc in aliquam orci Nulla facilisi Nullam vulputate ornare dictum Sed fermentum sapien nec felis gravida eget consequat ex iaculis Vestibulum nec feugiat nisl sed consequat nulla Sed in odio congue dictum augue et mollis nunc Integer libero leo eleifend sed congue ut ultrices sed nulla Integer sapien felis sollicitudin et turpis nec mattis egestas augue Phasellus non lectus ac ipsum ultrices consectetur eu at justo Nam';

得到的数组(我追求的是什么)

    $data = [];
    $data[] = 'Sed a suscipit enim in consectetur lacus';
    $data[] = 'Vestibulum efficitur convallis luctus';
    $data[] = 'Curabitur vehicula a massa nec pretium Sed a';
    $data[] = 'maximus nunc in aliquam orci Nulla facilisi';
    $data[] = 'Nullam vulputate ornare dictum Sed fermentum';
    $data[] = 'sapien nec felis gravida eget consequat ex';
    $data[] = 'iaculis Vestibulum nec feugiat nisl sed';
    $data[] = 'consequat nulla Sed in odio congue dictum';
    $data[] = 'augue et mollis nunc Integer libero leo';
    $data[] = 'eleifend sed congue ut ultrices sed nulla';
    $data[] = 'Integer sapien felis sollicitudin et turpis';
    $data[] = 'nec mattis egestas augue Phasellus non lectus';
    $data[] = 'ac ipsum ultrices consectetur eu at justo Nam';

每个数组包含45个字符,并且基于单词长度而非硬数字。

我知道我们可以使用这段代码根据单词而不是字符将字符串分解成特定的长度,但不知道如何真正使这一切协同工作。

$content = substr($content, 0, strpos($content, ' ', 45));

在您的情况下,您可以使用wordwrap函数,然后使用explodepreg_split

首先,我们需要将您的字符串拆分为所需长度的片段:

$ps = wordwrap($content, 45);

默认情况下,分隔符为'n。您可以设置自己的:

$ps = wordwrap($content, 45, '===');    // === is your divider    

接下来,如果您需要数组,您应该使用explodepreg_split作为$ps变量。如果你使用自定义除法器(如===),你可以:

$data = explode('===', $ps);

'n为除法器使用preg_split:

$data = preg_split('/'n/', $ps);

因此,最终代码可以是:

$data = preg_split('/'n/', wordwrap($content, 45));

这是在第45个字符之前用space的位置分割字符串。

$length = strlen($content);
$startpos = 0;
$out = array();
while($startpos<$length-45)
    {
    for ($i = $startpos +45 ; $i > $startpos; $i--)
    {
        if($content[$i] == " ")
            {
            array_push($out,substr($content,$startpos ,$i-$startpos));
            $startpos = $i+1;
            break;
            }
    }
}
array_push($out,substr($content,$startpos ));
var_dump($out);