PHP上是否有用于单词的裁剪函数?
我有一个20字的短语 我想在10点把它剪下来 PHP上是否有一个现成的函数用于此功能?$spolded=explode(“,$string);PHP上是否有用于单词的裁剪函数?,php,Php,我有一个20字的短语 我想在10点把它剪下来 PHP上是否有一个现成的函数用于此功能?$spolded=explode(“,$string); $exploded = explode(" ", $string); for($i = 0; $i < 10;$i++){ echo $exploded[$i]." "; } 对于($i=0;$i
$exploded = explode(" ", $string);
for($i = 0; $i < 10;$i++){
echo $exploded[$i]." ";
}
对于($i=0;$i<10;$i++){
echo$爆炸[$i]。“”;
}
您可以将短语拆分为一个数组,然后从数组中重新生成较短的短语
$words = explode(" ", $bigphrase);
$somewords = array_slice($words, 0, 10);
$smallphrase = implode(" ", $somewords);
您可以创建一个函数,将字符串拆分为数组,然后返回字符串。 像这样的东西应该可以
function crop($str, $length) {
$str = explode(" ", $str);
return implode(" " , array_slice($str, 0, $length));
}
不,我不这么认为,但你可以做这样的东西:
<?php
function strcrop($str, $words = 10)
{
if(substr_count($str, ' ') > 10)
return substr($str, 0, strpos($str, ' ', $words));
return $str;
}
如果不使用数组,您可以这样做(这可能会更快,但尚未测试)
不,在PHP中,字符串中的单词没有裁剪函数。PHP甚至不知道单词是什么,您也没有指定
因此,我假设正则表达式中的单词或单词字符符合您的需要。如果是这种情况,您只需匹配字符串中的前10个单词,然后删除其余单词:
$string = preg_replace('~^\W*(\w+(?:\W+\w+){0,9}+).*$~', '$1', $string);
这同样适用于前面的非单词字符或单词之间的多个字符。如果字符串少于10个单词,则会在末尾添加不必要的空格…如果字符串前面有空格(或中间有多个空格),它甚至不会返回前10个单词。如果字符串有连字符,这应该如何处理?例如,“用户定义”在您的上下文中是一个词还是两个词?我做了与其他解决方案相同的操作,但没有分解和内爆到原始字符串。不过我做了一个改进,因为如果没有更改的词少于10个,它就会断开。$input='我的词间隔太大:),你能帮忙吗?还是根本不可能代码>如果字符串开头有空格,单词之间有多个空格,该怎么办?或,“
在单词之间?”。
<?php
function strcrop($str, $words = 10)
{
if(substr_count($str, ' ') > 10)
return substr($str, 0, strpos($str, ' ', $words));
return $str;
}
<?php
$myText = "Lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua";
$result = cropWords($myText, 10);
if($result !== false) {
echo $result;
}
function cropWords($text, $cropPosition) {
$counter = 0;
$position = 0;
while($counter++ < $cropPosition) {
$position += strpos(substr($text, $position), " ");
if($position === false) {
return false;
} else {
$position++;
}
}
return trim(substr($text, 0, $position));
}
?>
$string = preg_replace('~^\W*(\w+(?:\W+\w+){0,9}+).*$~', '$1', $string);