8
votes

Comment obtenir seulement un nombre déterminé de mots d'une chaîne en PHP?

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 ().

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?

Je vais une immersion complète sur PHP et je ne connais pas beaucoup de fonctions de cordes.

Merci d'avance, Jason


0 commentaires

6 Réponses :


10
votes

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: xxx

alors vous pouvez couper les choses avec quelque chose comme: xxx


0 commentaires

2
votes

Ê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 .= '...';
}


3 commentaires

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.



17
votes

Je recommanderais d'utiliser le nombre de mots comme une base de référence. Vous pouvez facilement vous retrouver avec beaucoup moins ou beaucoup 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: xxx

qui dit, si vous passez 1 comme deuxième paramètre sur str_word_count , il retournera un tableau contenant tous les mots et vous pouvez utiliser la manipulation de la matrice à ce sujet. En outre, vous pourrait 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.

ps. Si vous avez besoin d'une version de sécurité Unicode de la fonction ci-dessus et que vous avez le mbstring ou iconv installés, remplacez simplement toutes les fonctions de chaîne avec leur MB _ ou iconv _ équivalents préfixés.


3 commentaires

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 , et vous pouvez toujours vous retrouver avec beaucoup 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.



2
votes

J'ai trouvé un moyen plus facile de le faire:

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


0 commentaires

1
votes

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


0 commentaires

0
votes
echo get_first_num_of_words("نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.", 100);

0 commentaires