En remplaçant toutes les occurrences d'une chaîne de valeurs à partir d'un tableau
Je suis de l'analyse d'une chaîne de caractères avant de l'envoyer à un DB. Je veux aller sur tous <br>
dans cette chaîne et de les remplacer avec des numéros uniques que je l'obtenir à partir d'un tableau, suivi par un saut de ligne.
Par exemple:
str = "Line <br> Line <br> Line <br> Line <br>"
$replace = array("1", "2", "3", "4");
my function would return
"Line 1 \n Line 2 \n Line 3 \n Line 4 \n"
Semble assez simple. Je voudrais juste faire une boucle while, obtenir toutes les occurances de <br>
à l'aide de strpos, et les remplacer par celles de la nécessaire numéros+le\n à l'aide de str_replace.
Problème est que j'ai toujours une erreur et je n'ai aucune idée de ce que je fais de mal? Probablement une erreur stupide, mais toujours ennuyeux.
Voici mon code
$str = "Line <br> Line <br> Line <br> Line <br>";
$replace = array("1", "2", "3", "4");
$replaceIndex = 0;
while(strpos($str, '<br>') != false )
{
$str = str_replace('<br>', $replace[index] . ' ' .'\n', $str); //str_replace, replaces the first occurance of <br> it finds
index++;
}
Des idées s'il vous plaît?
Merci d'avance,
Eh bien d'abord, de tous dans la première itération, vous permettra de remplacer toutes les instances de
<br>
.... De faire de cette façon vous auriez à seulement remplacez les pièces de la chaîne à l'aide de substr_replace
qui permet de définir les postions pour il de remplacement.OriginalL'auteur r3x | 2013-04-22
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser une regex et une fonction de rappel personnalisée, comme ceci:
Noter que cela suppose, nous pouvons modifier la
$replace
tableau. Si ce n'est pas le cas, vous pouvez garder un compteur:Vous pouvez le voir sur cette démo que ce sorties:
Comment venir? Avez-vous un message d'erreur? Si vous êtes à la recherche d'imprimer le littéral
\n
caractères au lieu de laisser PHP interpréter que pour le caractère de saut de ligne, modifier les guillemets autour de"\n"
de guillemets simples.Voici ma requête d'insertion (interestTable est fondamentalement la chaîne à analyser).
mysql_query("INSERT INTO $tbl_name(userID,storyID,rank, storyType, interestTable)VALUES('$userID','$storyID','$rank','$storyType','$interestTable')", $dbh1);
Si je supprime la valeur de interestTable à partir de cette requête, tout fonctionne bien, mais si je l'ajoute rien envoyé. Comme pour l'erreur, je n'ai pas tout. Bizarre :SJe pense que la chaîne de contenu n'est pas formaté correctement. Même "Ligne 1 \nLine 2\nLine 3\nLine 4\n" ne sont pas insérés dans la bd, il n'est donc pas une question de taille.
Sans un message d'erreur ou de plus d'informations il est impossible de dire ce qui ne va pas.
OriginalL'auteur nickb
si vous voulez juste de les compter, vous pouvez utiliser cette trop.
str .= ($index+1)
àstr .= $myArray[index];
OriginalL'auteur ikkez
C'est remplace TOUS le nombre de
<br>
il trouve.Le bon est à faire qu'une seule remplacement par itération:
substr_replace
peut remplacer une partie d'une chaîne. Correcte serait:(N'oubliez pas le
$
avant lareplaceIndex
!$replaceIndex
est une variable)str_replace
n'est pas combien de fois pour le remplacer. C'est une référence, défini pour combien de temps remplacer.OriginalL'auteur bwoebi
Vous devez vous rappeler l'
$
en face de variables. Aussi, essayez d'utiliser le php fonction regex, qui permet de spécifier le nombre de remplacements.Je me réfère à l' $limite variable dans preg_replace.
Je pensais que vous étiez à l'aide de la
$count
paramètre. Jamais l'esprit 🙂Ah, je vois que vous étiez de répondre à la réponse directement en dessous de la mienne!
Cela nécessite N regexes à être appliquée sur la chaîne, qui peut tuer les performances si la chaîne contient beaucoup de
<br>
éléments.OriginalL'auteur George
Voici ma version. 8 formaté en ligne, pas de regex, BAISER.
OriginalL'auteur Ben