J'ai une chaîne (titre wordpress) appelée "5 Fragen an ... xyz" Après avoir supprimé une balise HTML, les points de ce titre devraient être supprimé / remplacé. Je sauf que la chaîne affiche «xyz» uniquement
<?php $wptitle = get_the_title($post->id); // getwordpress title $wptitle = strip_tags($wptitle); // remove a <br> tag $wptitle = preg_replace('/\.(?=.*\.)/', ' ', $wptitle); // want to remove the dots $wptitle = str_replace('5 Fragen an', '', $wptitle); // remove the part 5 Fragen an echo $wptitle ?>
3 Réponses :
D'accord, j'avais d'abord fourni la mauvaise réponse.
J'ai donc créé un script pour vous.
// function description here // https://stackoverflow.com/questions/15944824/search-a-php-array-for-partial-string-match/15944913#15944913 function array_search_partial(string $keyword, array $arr): int { foreach($arr as $index => $string) { if ( strpos($string, $keyword) !== false ) { return $index; } } } function NewTitle(string $string): string{ // Here we split string into an array, and glue is " " $string = explode(' ', $string); // Now we search for a dots in array and $count getting number of key where is the dots $count = array_search_partial("..", $string); // Because we found a dots on some key (Let's say 3 key), // We shift the array because we don't need first words and dots in our title // Because the dots are on key 3 we must then shift 4 times array to remove dots and unnecessary words for($i=0;$i < $count+1;$i++){ array_shift($string); } // Here we join array elements in a string with a " " glue $string = implode(' ', $string); // returning an new string return $string; } echo NewTitle("5 Fragen an ... xyz some new title for blog "); //OutPut: xyz some new title for blog
Il ne semble pas que les points soient en fait à la toute fin de la chaîne.
C'est vrai mon mal, je vais fournir une meilleure réponse pendant quelques minutes.
@GrumpyCrouton je l'ai corrigé
Vous avez une déclaration de fonction <à l'intérieur d'une autre fonction?
@GrumpyCrouton je viens de le déplacer
À mon avis, votre solution semble un peu exagérée pour son objectif. J'ai supprimé mon vote défavorable, mais je ne pense pas qu'il soit dû à un vote favorable. Cela changerait peut-être si vous décriviez ce que fait réellement votre code, pourquoi cette solution est logique à utiliser.
@GrumpyCrouton Je pense que maintenant c'est beaucoup mieux :)
Utilisez rtrim pour supprimer des points (.) ou d'autres caractères à la fin d'une chaîne en PHP. Avec le paramètre character_mask, vous pouvez spécifier les caractères que vous souhaitez supprimer à la fin.
Exemple avec des points:
$title = ltrim(strpbrk($input , "." ),'. '); echo $title; //xyz some new title for blog
C'est la réponse à la question dans le titre.
Mise à jour: p>
Si la chaîne d'entrée ressemble à ceci
$input = "5 Fragen an ... xyz some new title for blog ";
vous pouvez le faire pour extraire la chaîne après les points:
$string = "remove dots (.) at the end of an string ..."; $string = rtrim($string,'.'); var_dump($string); //string(40) "remove dots (.) at the end of an string "
Une autre réponse a précédemment donné cette même solution, mais il a également été souligné que les .
ne sont pas à la fin de la chaîne.
Le modèle que vous avez essayé Dans vos données d'exemple, cela ne correspondra qu'à 2 points sur 3 car pour le dernier point, l'assertion échouera. Si vous voulez faire correspondre les 1 derniers points consécutifs ou plus, vous pouvez utiliser une anticipation négative \. (? =. * \.)
correspond à un point \.
et utilise une anticipation positive (? = code> affirmant que ce qui est à droite est un point.
(?!
à la place en affirmant que ce qui est à droite ne suit plus de points. \b5 Fragen an\h+\.+\h+
Est-ce toujours trois points? Si tel est le cas, quelque chose utilisant
explode ()
pourrait le faire.La chaîne affiche «xyz» car vous avez supprimé le reste avec le
str_replace
. Si vous voulez supprimer trois points, faites simplement un str_replace sur trois points.Si c'est TOUJOURS trois points. $ output = str_replace ('...', '', 'mystring ...');