0

mysqlデータベースからいくつかのデータを取得し、それを使用してテーブルを作成しています。非常に長い文字列を切り詰める切り捨て関数があります。

切り捨て関数は次のとおりです。

    function myTruncate($string, $limit, $break=".", $pad="...")
    {
      // return with no change if string is shorter than $limit
      if(strlen($string) <= $limit) return $string;

      // is $break present between $limit and the end of the string?
      if(false !== ($breakpoint = strpos($string, $break, $limit))) {
        if($breakpoint < strlen($string) - 1) {
          $string = substr($string, 0, $breakpoint) . $pad;
        }
      }
      return $string;
    }

関数が呼び出されるテーブル構築ビットは次のとおりです。

    while($row = mysql_fetch_assoc($liveItemQuery)){
       //get donation type
       $content .= "<tr><td>" . $i . "</td><td>" . $row['timestamp'] . "</td><td>" . myTruncate($row['description'], 25) . "</td><td>" . $row['po_number'] . "</td><td>" . number_format($row['amount'], 2) . "</td><td><a href=\"?view=expenses&itemid=" . $row['id'] . "\">Edit</a></td></tr>";
       $i++;
   }

とはいえ、説明フィールドでは切り捨ては実行されていません。descriptionデータベースにデータ型として格納されていることは注目に値するかもしれませんtextmyTruncate($row['description'], 25)また、レポートのvarダンプstring(1995)、テキストの全長。

では、何が起こっているのでしょうか。

よろしくお願いします。

4

1 に答える 1

0

「何があっても切り捨てる」。はるかに簡単です。

function myTruncate($s, $len){
    return substr($s, 0, $len) . (strlen($s)>$len? '...':'');
}
于 2013-01-10T18:54:44.030 に答える