使用PHP将字符串拆分为一半(Word-Aware)

Leo*_*o44 11 php string split

我试图把字符串分成两半,它不应该在一个单词的中间分开.

到目前为止,我想出了以下99%的工作:

$text = "The Quick : Brown Fox Jumped Over The Lazy / Dog";
$half = (int)ceil(count($words = str_word_count($text, 1)) / 2); 
$string1 = implode(' ', array_slice($words, 0, $half));
$string2 = implode(' ', array_slice($words, $half));
Run Code Online (Sandbox Code Playgroud)

这确实有效,根据字符串中的单词数正确地将任意字符串拆分为一半.但是,它正在删除字符串中的任何符号,例如,对于上面的示例,它将输出:

The Quick Brown Fox Jumped
Over The Lazy Dog
Run Code Online (Sandbox Code Playgroud)

我需要在分割后保留所有符号,如:和/在字符串中.我不明白为什么当前代码正在删除符号...如果您可以提供替代方法或修复此方法不删除符号,将不胜感激:)

Jef*_*ert 20

在查看你的示例输出时,我注意到我们的所有示例都已关闭,如果字符串的中间位于单词内部而不是给出更多内容,则我们给予string1更少.

例如中间The Quick : Brown Fox Jumped Over The Lazy / DogThe Quick : Brown Fox Ju它是在一个字的中间,在该第一实施例给出了字符串2分割字; 最下面的例子给string1分词.

在分词上给string1少一些

$text = "The Quick : Brown Fox Jumped Over The Lazy / Dog";

$middle = strrpos(substr($text, 0, floor(strlen($text) / 2)), ' ') + 1;

$string1 = substr($text, 0, $middle);  // "The Quick : Brown Fox "
$string2 = substr($text, $middle);  // "Jumped Over The Lazy / Dog"
Run Code Online (Sandbox Code Playgroud)

在拆分字上给string1更多

$text = "The Quick : Brown Fox Jumped Over The Lazy / Dog";

$splitstring1 = substr($text, 0, floor(strlen($text) / 2));
$splitstring2 = substr($text, floor(strlen($text) / 2));

if (substr($splitstring1, 0, -1) != ' ' AND substr($splitstring2, 0, 1) != ' ')
{
    $middle = strlen($splitstring1) + strpos($splitstring2, ' ') + 1;
}
else
{
    $middle = strrpos(substr($text, 0, floor(strlen($text) / 2)), ' ') + 1;    
}

$string1 = substr($text, 0, $middle);  // "The Quick : Brown Fox Jumped "
$string2 = substr($text, $middle);  // "Over The Lazy / Dog"
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 8

function split_half($string, $center = 0.4) {
        $length2 = strlen($string) * $center;
        $tmp = explode(' ', $string);
        $index = 0; 
        $result = Array('', '');
        foreach($tmp as $word) {
            if(!$index && strlen($result[0]) > $length2) $index++;
            $result[$index] .= $word.' ';
        }
        return $result;
}
Run Code Online (Sandbox Code Playgroud)

演示:http://codepad.viper-7.com/I58gcI

  • 除此以外,没有其他人为我工作。我做了一个小改动,解决了仅2个单词的问题,并通过添加```if(count($ tmp)<3){return $ tmp; 在爆炸之后 (2认同)