PHP - Разделить строку на массивы для каждых N символов - PullRequest
0 голосов
/ 03 мая 2020

Можно ли взять очень длинную строку и разбить ее по предложению на 5000 элементов массива (или меньше)?

Вот что у меня получилось:

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

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

Это просто разбивает строку на массив, содержащий элементы одного предложения. Мне нужно сгруппировать элементы в под-массивы, каждый из которых содержит список элементов, которые при объединении содержат не более 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;
?>

Спасибо всем, кто откликнулся, ваша поддержка очень много значит.

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Если я не неправильно понял ваш вопрос , тогда вам нужно что-то вроде этого,

<?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

0 голосов
/ 03 мая 2020

Вы можете сделать что-то вроде этого:

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

Вы можете проверить это проще, если вы сделаете это с меньшей максимальной длиной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...