1

我有一个大字符串,我想在每 50 个单词之后放入一个数组。我考虑过使用 strsplit 进行剪切,但意识到不会考虑单词,只是在到达 x char 时拆分。

我已经阅读了有关 str_word_count 的信息,但不知道如何将两者放在一起。

我现在得到的是:

$outputArr = str_split($output, 250);

foreach($outputArr as $arOut){

echo $arOut;
echo "<br />";

}

但我想用 50 个单词而不是 250 个字符来替换它以形成数组的每个项目。

任何帮助都感激不尽。

4

2 回答 2

2

假设这str_word_count足以满足您的需求¹,您可以简单地将其1作为第二个参数调用,然后用于array_chunk将单词分组为 50 个:

$words = str_word_count($string, 1);
$chunks = array_chunk($words, 50);

你现在有一个数组数组;将每 50 个单词连接在一起,使其成为您可以使用的字符串数组

foreach ($chunks as &$chunk) { // important: iterate by reference!
    $chunk = implode(' ', $chunk);
}

¹ 很可能不是。如果您想在处理书面语言时获得大多数人认为可接受的结果,您将不得不使用preg_split一些合适的正则表达式。

于 2012-08-29T10:44:01.200 回答
0

还有另一种方式:

<?php

$someBigString = <<<SAMPLE
  This, actually, is a nice' old'er string, as they said, "divided and conquered".
SAMPLE;

// change this to whatever you need to:     
$number_of_words = 7; 

$arr = preg_split("#([a-z]+[a-z'-]*(?<!['-]))#i", 
  $someBigString, $number_of_words + 1, PREG_SPLIT_DELIM_CAPTURE);

$res = implode('', array_slice($arr, 0, $number_of_words * 2));
echo $res;

演示

我认为这里preg_split有一个更好的工具(比str_word_count)。不是因为后者不灵活(不是:你可以用它的第三个参数定义什么符号可以组成一个词),而是因为preg_split在获得 N 个项目后基本上会停止处理字符串。

这个函数很常见的技巧是捕获分隔符,然后使用它们来重建字符串,其中包含前 N 个单词(其中 N 给出)并保存标点符号。

(当然,我的示例中使用的正则表达式并不严格遵守与str_word_count语言环境相关的行为。但它仍然限制单词由字母'-符号组成,后两者不在任何单词的开头和结尾)。

于 2012-08-29T11:24:01.177 回答