PHP使用str_word_count和strsplit在x个单词后面形成数组

时间:2012-08-29 10:37:42

标签: php string strsplit

我有一个大字符串,我希望在每50个单词后放入一个数组。我想过使用strsplit来剪切,但意识到不会考虑到这些词,只要它转到x char就分开了。

我已经阅读了关于str_word_count但是无法弄清楚如何将两者放在一起。

目前我得到的是:

$outputArr = str_split($output, 250);

foreach($outputArr as $arOut){

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

}

但是我想用50个单词代替250个字符来代替数组的每个项目。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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代替一些合适的正则表达式。

答案 1 :(得分: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;

Demo

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

这个功能非常普遍的技巧是捕获分隔符,然后使用它们用前N个单词(给出N)重建字符串并保存标点符号。

(当然,我的示例中使用的正则表达式并不严格遵守str_word_count区域设置相关的行为。但它仍然会将字词限制为由alpha '-组成符号,后两者不在任何单词的开头和结尾处。)