0

PHP を使用して文字列から返される文字数を制限しようとしています。

サーバーがクラッシュしそうな解決策(高負荷/無限ループ)を適用したので、代替案を求めています。

文字列を切り取って特定の文字数を表示する解決策を見つけようとしていますが、それでも文の意味を尊重します。つまり、単語の途中で切り取らない

私の関数呼び出しは次のとおりです。

<?php
uc_textcut(get_the_title());
?>

そして、私の functions.php では、これが私が使用したコードです (そしてクラッシュします):

function uc_textcut($var) {

     $position = 60;
     $result = substr($var,$position,1);

     if ($result !=" ") {
         while($result !=" ") {
            $i = 1;
            $position = $position+$i;
            $result = substr($var,$position,1);
         }
     }

     $result = substr($var,0,$position);
     echo $result;
     echo "...";

}

私の問題は$position = 60.

その数値が高いほど、非常に遅いループを実行するなど、より多くの負荷がかかります。

に何か問題while()があると思いますが、単語の途中で中断するのではなく、訪問者が理解できるように努めています。

入力はありますか?

:)どうもありがとう

4

5 に答える 5

4

単語の途中で文字列を切り取らずに文字列を切り取りたい場合は、このwordwrap関数の使用を検討してください。

改行で区切られた行を含む文字列を返します; したがって、\ nを区切り文字として使用してその文字列を展開し、返された配列の最初の要素を取得する必要があります。


詳細および/または例および/または他の解決策については、例えば、以下を参照してください。

于 2009-08-12T22:47:05.597 に答える
0
    $cutoff = 25;
    if ($i < $cutoff)
    {
        echo $str;
    }
    else
    {
        // look for a space
        $lastSpace = strrchr(substr($str,0,$cutoff)," ");
        echo substr($str,0,$lastspace);
        echo "...";
    }
于 2009-08-12T22:44:41.637 に答える
0

これにより、60文字または60文字の後の最初のスペースのいずれかで切り捨てられます。これは、最初のコードと同じですが、はるかに効率的です。

$position = 60;
if(substr($var,$position,1) == " ") $position = strpos($var," ",$position);

if($position == FALSE) $result = $var;
else $result = substr($var,0,$position);
于 2009-08-12T22:47:54.283 に答える
0
$matches = array();
preg_match('/(^.{60,}?) /', $text, $matches);
print_r($matches[1]);

次に、必要に応じて省略記号を追加する必要があります。

于 2009-08-12T22:51:18.787 に答える
0
<?php

// same as phantombrain's but in a function
function uc_textcut($text) {
    $matches = array();
    preg_match('/(^.{60,}?) /', $text, $matches);
    if (isset($matches[1])) {
        echo $matches[1] . "...";
    } else {
        echo $text;
    }
}


// test it
$textLong = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tempus dui non sapien ullamcorper vel tincidunt nisi cursus. Vestibulum ultrices pharetra justo id varius.';
$textShort = 'Lorem ipsum dolor sit amet.';

uc_textcut($textLong);
echo "\n";
uc_textcut($textShort);

?>

版画:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed...
Lorem ipsum dolor sit amet.
于 2009-08-12T23:02:40.510 に答える