2009-08-12 18 views
0

J'essaie de limiter le nombre de caractères retournés d'une chaîne en utilisant PHP.PHP Limite de sortie de chaîne par caractères spécifiques

J'ai appliqué une solution qui semble planter sur le serveur (charge élevée/boucle infinie), donc je demande une alternative.

Je suis en train de trouver une solution qui coupe la chaîne et affiche le nombre de caractères spécifique, mais respecte toujours le sens de la phrase, à savoir qu'il ne fait pas une coupe au milieu du mot

Mon appel de fonction est la suivante:

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

et dans mon functions.php c'est le code je (et il fait accident):

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

} 

mon problème est avec $position = 60.

Plus ce nombre est élevé, plus la charge est importante - comme si la boucle était très lente.

J'imagine que quelque chose ne va pas avec while(), mais j'essaie de le garder encore compréhensible par le visiteur, encore une fois, ne pas couper au milieu de mot.

Toute entrée?

:) merci les gars très beaucoup

Répondre

4

Si vous voulez seulement couper la chaîne, sans le faire au milieu d'un mot, vous pouvez envisager d'utiliser la fonction wordwrap.

Il retournera une chaîne avec des lignes séparées par une nouvelle ligne; Donc, vous devez alors exploser cette chaîne en utilisant \ n comme un séparateur, et prendre le premier élément du tableau retourné.


Pour plus d'informations et/ou des exemples et/ou d'autres solutions, voir, par exemple:

+0

Hmm ... je dois dire, c'est une pensée vraiment intelligente. Merci pour le conseil. Je l'ai appliqué ... ça marche vite et ça coûte une ligne de code. salutations –

+1

@Ahmad: vous êtes les bienvenus :-); @Byron: l'une des bonnes choses avec PHP est qu'il y a toujours quelque chose à découvrir ;-) (et c'est une raison pour laquelle j'aime bien ^^) –

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

scission (» », strlen ($ str)); semble faux. –

+0

ouais, je l'ai supprimé merci. –

0

Cette va couper arrêt soit 60 caractères ou le premier espace après 60 caractères, identique à votre code initial, mais beaucoup plus efficace:

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

Ensuite, vous devez ajouter les points de suspension si nécessaire.

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

>

Prints:

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