0

ここに文字列があります: "status; status;" などなど...文字列が100文字を超える状態から文字列を切り取る必要があります

例: 「ステータス; ステータス; ステータス; (ここでは 100 文字を超えています) ...」

以前は配列でそれを行いました:

 if($length_of_string > 100)
 { 
     $number_of_elements = count($statuses_array);
     echo $statuses_array[$number_of_elements-1];
     echo ' ... ';
     } else {
     echo $string_of_statuses;
}

しかし、それは良くありません

前もって感謝します!

4

3 に答える 3

2

どうですか:

$l = strlen($status_string);
if ($l > 100) {
   //Split string into array of statuses, to not break last status
   $ls = explode(";",$status_string);
   $new_status = "";
   $i = 0;
   //Check if there is room for the next status in $new_status without passing 100 chars
   while (strlen($new_status) < 100) {
      $new_status .= $ls[$i].";";
      $i++;
   }
   $new_status = substr($new_status,0,-1)."...";
}

編集:最後のステータスが明らかに100文字を超える可能性があるため、コードを簡素化しました。これにより、実際には簡単になります

于 2013-07-25T09:29:04.163 に答える
0

あなたの変数
$variable_text="status; status; status; status; status; status; status; status; status; status; status; status; statwus; status; status; status; status; status;";

「...」を追加したい後の数字
$characters=100;

$variable_textの単語を数える
$words_number=preg_split("/[\s]+/", $variable_text);


変数$wordsに単語を追加します。変数$wordsの文字が変数$characters(100)より小さい場合、単語が変数$resultに追加されます。100 番目の文字が「sta(100)tus;」の単語の場合 この単語は変数$resultに追加されません

for($i=0;$i<=count($words_number);$i++){
    $words=$words." ".$words_number[$i];
    if(strlen($words)<$characters){
        $result=$words;
    }
}

変数$variable_textが変数$resultよりも大きい場合は、末尾に「...」を追加します

if(strlen($result)<strlen($variable_text)){
    $result=$result." ...";
}

結果を表示
echo $result;

于 2013-07-25T10:08:20.180 に答える
0

私があなたの質問を正しく読んでいるなら、私はそうだと思います: 文字列が 100 文字を超える場合は、最初の 100 文字に省略記号を追加してください。

regexもしそうなら、必ずしも、またはは必要ありませんpreg_replace。次のように簡単に実行できます。

$status_length = strlen($status_string);

$status = '';

if ($status_length > 100) {
   //get the substring up to the first 100 characters:
   $status = substr($status_string, 0, 100);

   //now append the ellipsis to it:
   $status .= '...';
}

echo $status;
于 2013-07-25T09:20:41.957 に答える