我有一个大字符串,我希望在每50个单词后放入一个数组。我想过使用strsplit来剪切,但意识到不会考虑到这些词,只要它转到x char就分开了。
我已经阅读了关于str_word_count但是无法弄清楚如何将两者放在一起。
目前我得到的是:
$outputArr = str_split($output, 250);
foreach($outputArr as $arOut){
echo $arOut;
echo "<br />";
}
但是我想用50个单词代替250个字符来代替数组的每个项目。
任何帮助将不胜感激。
答案 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;
我认为preg_split
是一个比str_word_count
更好的工具。不是因为后者不灵活(它不是:你可以定义哪些符号可以用第三个参数组成一个单词),但是因为preg_split
在获得N个项目后将基本上停止处理字符串。
这个功能非常普遍的技巧是捕获分隔符,然后使用它们用前N个单词(给出N)重建字符串并保存标点符号。
(当然,我的示例中使用的正则表达式并不严格遵守str_word_count
区域设置相关的行为。但它仍然会将字词限制为由alpha '
和-
组成符号,后两者不在任何单词的开头和结尾处。)