1

ビューに次のループがあるとします

foreach ($value as $row):
     echo $row['name'] . ', ';
endforeach;

これは私のブラウザでこのような文字列を出力します

ゲディ、リー、ニール、パート、アレックス、

nたとえば、この文字列を文字で切り捨てる方法を誰かが提案できるのだろうか

ゲディ、リー、ネ...

文字列がループから出力されているため、切り捨て関数を this の周りにラップする方法がわかりませんforeach

助けてくれてありがとう!

サンプル切り捨て関数

function truncate_text($text, $nbrChar, $append='...') {
     if(strlen($text) > $nbrChar) {
          $text = substr($text, 0, $nbrChar);
          $text .= $append;
     }
     return $text;
}
4

4 に答える 4

3

行の値を変数に保存し、その変数を切り捨ててエコーしないのはなぜですか?

var $str = "";
foreach ($value as $row):
     $str .= $row['name'] . ', ';
endforeach;

echo truncate_text($str, 'whatever');
于 2011-05-23T02:47:21.703 に答える
2

まず、foreachは必須ではありません。次に、必要に応じて非常に簡単に切り捨てることができます。

// Maximum length of the string; note that this does not include the '...'
$length = 20; 

// This is PHP 5.3 only and converts the value array to an array of names 
// $value = array_map(function ($f) { return $f["name"];}, $value);

// This is a PHP 5.2 way to do the array mapping
$value = array_map(create_function('$f', 'return $f["name"];'), $value);

$string = join(', ', $value);
$truncated = (strlen($string) > $length) 
    ? substr($string, 0, $length) . '...' 
    : $string;

これには、醜い末尾のコンマを残さないという利点もあります。

于 2011-05-23T02:54:40.847 に答える
0

あなたはこれを行うことができますbreak

$limit = 20;
$str = '';
foreach ($value as $row) {
   if ($str > $limit) {
      $str .= substr($row, 0, $limit) . '...';
      break;
   }
   $str .= "$row, ";
   $limit -= strlen($row);
}
$str = rtrim($str, ', ');

これの(マイナーな)利点は、行全体を反復処理する必要がないことです。

于 2011-05-23T02:59:08.100 に答える
0
function truncate_text($text, $nbrChar, $append='...') {
     if(strlen($text) > $nbrChar) {
          $text = substr($text, 0, $nbrChar);
          $text .= $append;
     }
     return $text;
}

そして、foreachでこのようにすることができます

foreach ($value as $row) {
     $name = truncate_text($row['name']);
}

$name切り捨てられたテキストを出力するようになりました。

ループや条件に括弧を使用することも検討してください。必須ではありませんが、括弧 {} を使用するとコードを適切にインデントできるため、コードのデバッグ中に大いに役立ちます。

于 2011-05-23T02:52:36.307 に答える