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

时间:2015-11-01 16:30:59

标签: php

我有一个字符串,我想打破一个数组。

每个数组都需要设置一个长度,比方说,45个字符。

每个断点需要基于单词而不是字符(因此,从不超过45,但如果使用长字符,则可以在30' ish范围内)

所以,让我们拿这个字符串

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

2 个答案:

答案 0 :(得分:1)

在您的情况下,您可以使用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));

答案 1 :(得分:0)

这是在第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);