Voici ce que j'essaie de faire. J'ai un bloc de texte et j'aimerais extraire les 50 premiers mots de la chaîne sans couper les mots au milieu. C'est pourquoi je préférerais des mots opposés aux personnages, puis je pourrais simplement utiliser une fonction gauche (). P>
Je sais que la fonction Str_Word_Count ($ var) renvoie le nombre de mots dans une chaîne, mais comment ne renvoyera-je que les 50 premiers mots? P>
Je vais une immersion complète sur PHP et je ne connais pas beaucoup de fonctions de cordes. p>
Merci d'avance, Jason P>
6 Réponses :
str_word_count prend un paramètre facultatif qui lui indique ce qu'il faut revenir.
retourne une gamme de chaînes qui sont les mots: p> alors vous pouvez couper les choses avec quelque chose comme: p>
Êtes-vous sûr de vouloir un certain nombre de mots? Si vous faites quelque chose comme une "prévisualisation", il est généralement préférable de faire quelque chose comme "jusqu'à 300 caractères, coupé à une limite de mot", auquel cas vous pouvez utiliser quelque chose comme:
if (strlen($str)>300) { $str = substr($str,0,300); $pos = strrpos($str, ' '); if ($pos !== false && $pos > 200) // If there is no space in the last 100 chars, just truncate $str = substr($str,0,$pos); // You may also want to add ellipses: // $str .= '...'; }
Bonjour, quiconque a modelé ma réponse, pourriez-vous expliquer ce qui ne va pas avec ça? Je concède que ce n'est pas aussi détaillé que la réponse de Jason, mais je ne vois rien de mal avec ça ...
Vous avez eu mon vote, mais vous oubliez quoi faire, s'il n'y a pas d'espace?
En fait, j'ai abordé cette situation. Je l'ai modifiée pour commenter la ligne spécifique dans laquelle je le fais.
Je recommanderais d'utiliser le nombre de mots comme une base de référence. Vous pouvez facilement vous retrouver avec beaucoup em> moins ou beaucoup em> plus de données que vous n'avez destiné à afficher. Une approche que j'ai utilisée dans le passé est de demander une demande souhaitée. longueur, mais assurez-vous qu'il ne tronque pas un mot. Voici quelque chose qui peut fonctionner pour vous: p> qui dit, si vous passez ps. Si vous avez besoin d'une version de sécurité Unicode de la fonction ci-dessus et que vous avez le 1 code> comme deuxième paramètre sur
str_word_count code> , il retournera un tableau contenant tous les mots et vous pouvez utiliser la manipulation de la matrice à ce sujet.
En outre, vous pourrait em> bien que, c'est un peu hakakey, explosez la chaîne sur les espaces, etc. Mais cela introduit beaucoup de place à une erreur, comme les choses qui ne sont pas des mots qui ne sont pas comptés comme des mots. p>
mbstring code> ou
iconv code> installés, remplacez simplement toutes les fonctions de chaîne avec leur
MB _ code> ou
iconv _ code> équivalents préfixés. p> p>
Toutes les réponses sont de qualité, mais vous avez expliqué pourquoi je devrais aller par des personnages au lieu de mots. Merci!
Au fait, vous ne répondez pas à la situation où il n'y a pas d'espace dans les caractères de la première longueur $ de longueur de code>, et vous pouvez toujours vous retrouver avec beaucoup i> moins de données que vous ne vouliez Pour afficher si le seul espace est au quatrième caractère (voir ma réponse pour la solution).
Honnêtement, pour ce que j'ai utilisé cette méthode pour, cela ne serait jamais un problème. Bon point, cependant.
J'ai trouvé un moyen plus facile de le faire: p>
fonction get_len_of_word ($ str, $ numéro)
{
$ array_str = exploser ("", $ str);
Si (isset ($ array_str [$ numéro]))
{
renvoyer imploser ("", array_slice ($ array_str, 0, $ numéro));
}
retour $ STR;
} code> p>
Voici un exemple supplémentaire,
function getWordsFromString($str,$word_count) { $new_str=$str; $_strArr=explode(" ",$str); $_tempArr=array(); if(count($_strArr)>$word_count) { foreach ($_strArr as $key=> $value) { $_tempArr[]=$value; if($key==$word_count-1) { $new_str=implode(" ",$_tempArr).' ...'; } } } return $new_str; }
echo get_first_num_of_words("ÙÙ Ùذج ÙÙص عرب٠اÙغرض Ù Ù٠تÙضÙØ ÙÙÙ ÙÙ Ù٠استخÙاص Ø£Ù٠عدد ٠عÙ٠٠٠اÙÙÙ٠ات اÙÙ ÙجÙدة ÙÙ Ùص ٠عÙÙ.", 100);