je suis venu avec cette fonction qui tronque une chaîne donnée soit le nombre donné de mots ou le nombre de caractères donné tout ce qui est plus court. Puis, après il coupe tout après le nombre de limite de caractères ou de mots, il joint une « ... » à la chaîne.chaîne de troncature, mais retirez milieu de chaîne au lieu de fin
Comment puis-je supprimer les caractères/et les remplacer par des mots à partir du milieu de la chaîne avec « ... » au lieu de remplacer les caractères/mots à la fin de la « ... »?
Voici mon code:
function truncate($input, $maxWords, $maxChars){
$words = preg_split('/\s+/', $input);
$words = array_slice($words, 0, $maxWords);
$words = array_reverse($words);
$chars = 0;
$truncated = array();
while(count($words) > 0)
{
$fragment = trim(array_pop($words));
$chars += strlen($fragment);
if($chars > $maxChars){
if(!$truncated){
$truncated[]=substr($fragment, 0, $maxChars - $chars);
}
break;
}
$truncated[] = $fragment;
}
$result = implode($truncated, ' ');
return $result . ($input == $result ? '' : '...');
}
Par exemple, si truncate('the quick brown fox jumps over the lazy dog', 8, 16);
est appelé, 16 caractères est plus courte de sorte que est la troncature qui va se passer. Ainsi, «les sauts de renard sur le chien paresseux» seront enlevés et «...» sera ajouté.
Mais, au contraire, comment puis-je avoir la moitié de la limite de caractères viennent du début de la chaîne et la moitié viennent de la fin de la chaîne et ce qui est enlevé au milieu remplacé par « ... »? Ainsi, la chaîne que je suis à la recherche d'être de retour dans ce domaine, l'un, le cas serait: «le chien Quic ... paresseux.
+1 simple et belle. – Orangepill
besoin d'un 'if ($ textLength> $ maxChars)' – Petah
Notez que cela se traduit par une chaîne qui est de 19 caractères, même si est fixé à 16 $ maxChars. – adean