2009-08-12 8 views
0

Ich versuche, die Anzahl der Zeichen von einer Zeichenfolge mit PHP zurückgegeben.PHP Limit Zeichenfolge durch bestimmte Zeichen

Ich habe eine Lösung angewendet, die den Server zum Absturz bringt (hohe Last/Endlosschleife), also frage ich nach einer Alternative.

Ich versuche, eine Lösung zu finden, die die Zeichenfolge schneiden und zeigen die bestimmte Anzahl von Zeichen, sondern achten immer noch die Bedeutung des Satzes, das heißt es My keinen Schnitt in der Mitte des Wortes macht

Funktionsaufruf ist wie folgt:

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

und in meinem functions.php das ist der Code, den ich verwenden (und es tut Absturz):

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 "..."; 

} 

Mein Problem ist mit 012..

Je höher diese Zahl ist, desto mehr Last wird benötigt - etwa eine sehr langsame Schleife.

Ich stelle mir vor, etwas stimmt nicht mit while(), aber ich versuche, es immer noch verständlich durch den Besucher zu halten, wieder, nicht in der Mitte des Wortes schneiden.

Irgendwelche Eingaben?

:) vielen Dank Jungs

Antwort

4

Wenn Sie nur die Zeichenfolge schneiden möchten, ohne sie in der Mitte eines Wortes zu tun, könnten Sie die wordwrap Funktion prüfen, mit.

Es wird eine Zeichenfolge mit Zeilen zurückgegeben, die durch eine neue Zeile getrennt sind. Sie müssen diese Zeichenfolge also mit \ n als Trennzeichen auflösen und das erste Element des zurückgegebenen Arrays übernehmen.


Für weitere Informationen und/oder Beispiele und/oder andere Lösungen finden, zum Beispiel:

+0

Hmm .. muss sagen, das ist ein wirklich kluges Denken. Danke für den Tipp. Ich habe es angewendet .. es funktioniert schnell und es kostet eine Zeile Code. Grüße –

+1

@Ahmad: Gern geschehen :-); @Byron: Eines der schönen Dinge bei PHP ist, dass es immer etwas zu entdecken gibt ;-) (und das ist ein Grund warum ich SO ^^ mag) –

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 "..."; 
    } 
+0

split (““, strlen ($ str)); sieht falsch aus. –

+0

Ja, ich habe es dankend entfernt. –

0

Diese werde schneiden off entweder 60 Zeichen oder den ersten Raum nach 60 Zeichen, identisch mit Ihrer ursprünglichen Code aber wesentlich effizienter:

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

if($position == FALSE) $result = $var; 
else $result = substr($var,0,$position); 
0
$matches = array(); 
preg_match('/(^.{60,}?) /', $text, $matches); 
print_r($matches[1]); 

Dann müssen Sie die Ellipsen hinzufügen, wenn nötig.

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); 

>

Drucke:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed... 
Lorem ipsum dolor sit amet.