Comment puis-je, à partir d'une sortie, sélectionner uniquement les 10 premiers mots?
implode(' ', array_slice(explode(' ', $sentence), 0, 10));
Pour ajouter la prise en charge d'autres sauts de mots comme les virgules et les tirets, preg_match
donne un moyen rapide et ne nécessite pas de fractionner la chaîne:
function get_words($sentence, $count = 10) {
preg_match("/(?:\w+(?:\W+|$)){0,$count}/", $sentence, $matches);
return $matches[0];
}
Comme le mentionne Pebbl, PHP ne gère pas très bien UTF-8 ou Unicode, donc si c'est un problème, vous pouvez remplacer \w
pour [^\s,\.;\?\!]
et \W
pour [\s,\.;\?\!]
.
Le simple fractionnement sur des espaces ne fonctionnera pas correctement s'il y a un caractère inattendu à la place d'un espace dans la structure de la phrase, ou si la phrase contient plusieurs espaces conjoints.
La version suivante fonctionnera quel que soit le type d '"espace" que vous utilisez entre les mots et peut être facilement étendue pour gérer d'autres caractères ... elle prend actuellement en charge n'importe quel caractère d'espace blanc plus,. ; ? !
function get_snippet( $str, $wordCount = 10 ) {
return implode(
'',
array_slice(
preg_split(
'/([\s,\.;\?\!]+)/',
$str,
$wordCount*2+1,
PREG_SPLIT_DELIM_CAPTURE
),
0,
$wordCount*2-1
)
);
}
Les expressions régulières sont parfaites pour ce problème, car vous pouvez facilement rendre le code aussi flexible ou strict que vous le souhaitez. Il faut cependant être prudent. J'ai spécifiquement abordé ce qui précède en ciblant les écarts entre les mots - plutôt que les mots eux-mêmes - car il est assez difficile d'énoncer sans équivoque ce qui définira un mot.
Prendre la \w
Mot limite ou son inverse \W
. Je m'appuie rarement sur ceux-ci, principalement parce que - selon le logiciel que vous utilisez (comme certaines versions de PHP) - ils n'incluent pas toujours les caractères UTF-8 ou Unicode .
Dans les expressions régulières, il vaut mieux être précis à tout moment. Pour que vos expressions puissent gérer des choses comme les suivantes, peu importe où elles sont rendues:
echo get_snippet('Это не те дроиды, которые вы ищете', 5);
/// outputs: Это не те дроиды, которые
Éviter le fractionnement pourrait cependant être utile en termes de performances. Vous pouvez donc utiliser l'approche mise à jour de Kelly, mais basculez \w
pour [^\s,\.;\?\!]+
et \W
pour [\s,\.;\?\!]+
. Bien que, personnellement, j'aime la simplicité de l'expression de fractionnement utilisée ci-dessus, elle est plus facile à lire et donc à modifier. La pile de PHP sont cependant un peu moches :)
http://snipplr.com/view/8480/a-php-function-to-return-the-first-n-words-from-a-string/
function shorten_string($string, $wordsreturned)
{
$retval = $string; // Just in case of a problem
$array = explode(" ", $string);
/* Already short enough, return the whole thing*/
if (count($array)<=$wordsreturned)
{
$retval = $string;
}
/* Need to chop of some words*/
else
{
array_splice($array, $wordsreturned);
$retval = implode(" ", $array)." ...";
}
return $retval;
}
Je suggère d'utiliser str_Word_count
:
<?php
$str = "Lorem ipsum dolor sit amet,
consectetur adipiscing elit";
print_r(str_Word_count($str, 1));
?>
L'exemple ci-dessus affichera:
Array
(
[0] => Lorem
[1] => ipsum
[2] => dolor
[3] => sit
[4] => amet
[5] => consectetur
[6] => adipiscing
[7] => elit
)
Utilisez une boucle pour obtenir les mots que vous voulez.
Source: http://php.net/str_Word_count
Cela peut facilement être fait en utilisant str_Word_count()
$first10words = implode(' ', array_slice(str_Word_count($sentence,1), 0, 10));
Pour sélectionner 10 mots du texte donné, vous pouvez implémenter la fonction suivante:
function first_words($text, $count=10)
{
$words = explode(' ', $text);
$result = '';
for ($i = 0; $i < $count && isset($words[$i]); $i++) {
$result .= $words[$i];
}
return $result;
}
Cela pourrait vous aider. Fonction pour retourner N no. de mots
public function getNWordsFromString($text,$numberOfWords = 6)
{
if($text != null)
{
$textArray = explode(" ", $text);
if(count($textArray) > $numberOfWords)
{
return implode(" ",array_slice($textArray, 0, $numberOfWords))."...";
}
return $text;
}
return "";
}
}
Essaye ça
$str = 'Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.';
$arr = explode(" ", str_replace(",", ", ", $str));
for ($index = 0; $index < 10; $index++) {
echo $arr[$index]. " ";
}
Je sais que ce n'est pas le moment de répondre, mais laissez les nouveaux venus choisir leurs propres réponses.
function get_first_num_of_words($string, $num_of_words)
{
$string = preg_replace('/\s+/', ' ', trim($string));
$words = explode(" ", $string); // an array
// if number of words you want to get is greater than number of words in the string
if ($num_of_words > count($words)) {
// then use number of words in the string
$num_of_words = count($words);
}
$new_string = "";
for ($i = 0; $i < $num_of_words; $i++) {
$new_string .= $words[$i] . " ";
}
return trim($new_string);
}
Utilisez-le comme ceci:
echo get_first_num_of_words("Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid, illo?", 5);
Sortie: Lorem ipsum dolor sit amet
Cette fonction fonctionne également très bien avec les caractères unicode comme les caractères arabes.
echo get_first_num_of_words("نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.", 100);
Sortie: نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.
C'est totalement ce que nous recherchons. Il suffit de couper et coller dans votre programme et de l'exécuter.
function shorten_string($string, $wordsreturned)
/* Returns the first $wordsreturned out of $string. If string
contains fewer words than $wordsreturned, the entire string
is returned.
*/
{
$retval = $string; // Just in case of a problem
$array = explode(" ", $string);
if (count($array)<=$wordsreturned)
/* Already short enough, return the whole thing
*/
{
$retval = $string;
}
else
/* Need to chop of some words
*/
{
array_splice($array, $wordsreturned);
$retval = implode(" ", $array)." ...";
}
return $retval;
}
et il suffit d'appeler la fonction dans votre bloc de code comme
$data_itr = shorten_string($Itinerary,25);
Cela pourrait vous aider. Fonction à retourner 1no. of words
.
function num_of_Word($text,$numb) {
$wordsArray = explode(" ", $text);
$parts = array_chunk($wordsArray, $numb);
$final = implode(" ", $parts[0]);
if(isset($parts[1]))
$final = $final." ...";
return $final;
return;
}
echo num_of_Word($text, 10);
Je le fais de cette façon:
function trim_by_words($string, $Word_count = 10) {
$string = explode(' ', $string);
if (empty($string) == false) {
$string = array_chunk($string, $Word_count);
$string = $string[0];
}
$string = implode(' ', $string);
return $string;
}
Sa compatibilité UTF8 ...