繁体   English   中英

PHP - 每 N 个字符将字符串拆分为 Arrays

[英]PHP - Split String Into Arrays for every N characters

是否可以将一个很长的字符串逐句拆分为 5000 个字符(或更小)的数组项?

这是我到目前为止所拥有的:

<?php
$text = 'VERY LONG STRING';

foreach(explode('. ', $text) as $chunk) {
    $accepted[] = $chunk;
}
?>

这只是将字符串拆分为包含单个句子项的数组。 我需要将项目分组到子 arrays 中,每个项目都包含一个项目列表,这些项目加在一起时包含不超过 5000 个字符。

我试过这个:

<?php
$text = 'VERY LONG STRING';

foreach(explode('. ', $text) as $chunk) {
    $key = strlen(implode('. ', $accepted).'. '.$chunk) / 5000;
    $accepted[$key][] = $chunk;
}
?>

您可能可以看到我在这里尝试做的事情,但没有奏效。

更新:这成功了:

<?php
foreach(explode('. ', $text) as $chunk) {
  $chunkLen = strlen(implode('. ', $result).'. '.$chunk.'.');
  if ($len + $chunkLen > 5000) {
    $result[] = $partial;
    $partial = [];
    $len = 0;
  }
  $len += $chunkLen;
  $partial[] = $chunk;
}

if($partial) $result[] = $partial;
?>

感谢所有回复的人,您的支持意义重大。

如果我没有误解你的问题,那么你需要这样的东西,

<?php
$text = 'VERY LONG STRING';
$s = chunk_split($text, 3, '|'); // put 5000 instead of 3
$s = substr($s, 0, -1);
$accepted = explode('|', $s);
print_r($accepted);
?>

或者

<?php
$text = 'VERY LONG STRING';
$accepted = str_split($text, 3);
print_r($accepted);
?>

演示: https://3v4l.org/H9DAl

演示: https://3v4l.org/PN7Aj

你可以这样做:

$text = 'VERY LONG STRING';
$result = [];
$partial = [];
$len = 0;

foreach(explode(' ', $text) as $chunk) {
  $chunkLen = strlen($chunk);
  if ($len + $chunkLen > 5000) {
    $result[] = $partial;
    $partial = [];
    $len = 0;
  }
  $len += $chunkLen;
  $partial[] = $chunk;
}

if ($partial) {
    $result[] = $partial;
}

如果您使用较低的最大长度进行测试,您可以更轻松地测试它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM