Existe-t-il une fonction PHP qui puisse faire cela ?
J'utilise strpos
pour obtenir la position d'une sous-chaîne et je veux insérer une string
après cette position.
Existe-t-il une fonction PHP qui puisse faire cela ?
J'utilise strpos
pour obtenir la position d'une sous-chaîne et je veux insérer une string
après cette position.
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);
Dans l'extrait ci-dessus, $pos
est utilisé dans le offset
de la fonction.
décalage
Si le décalage n'est pas négatif, le remplacement commencera au offset dans la chaîne.Si l'offset est négatif, le remplacement commencera à l'offset'th caractère à partir de la fin de la chaîne.
Cela devrait être la réponse acceptée. Les fonctions intégrées ont toujours la priorité sur les fonctions créées par l'utilisateur.
Oui, le quatrième argument étant "0", la chaîne de remplacement est insérée sans écraser la chaîne d'origine.
Réponse brillante. Mais pour les paresseux (comme moi) il devrait y avoir une courte explication dans votre post peut-être. Je vais le faire maintenant et faire un copier/coller de php.net : "Bien sûr, si la longueur est égale à zéro, cette fonction aura pour effet d'insérer le remplacement dans la chaîne de caractères au décalage de début donné."
@minitech L'opérateur a dit using strpos to get the position of a substring
donc le substring
vient en premier. Et il n'a pas dit de trouver une seule position.
Je voulais juste ajouter quelque chose : j'ai trouvé la réponse de Tim Cooper très utile, je l'ai utilisée pour créer une méthode qui accepte un tableau de positions et qui fait l'insertion sur toutes les positions, donc la voici :
EDIT : On dirait que mon ancienne fonction a supposé $insertstr
était seulement un caractère et que le tableau était trié. Cela fonctionne pour une longueur de caractère arbitraire.
function stringInsert($str, $pos, $insertstr) {
if (!is_array($pos)) {
$pos = array($pos);
} else {
asort($pos);
}
$insertionLength = strlen($insertstr);
$offset = 0;
foreach ($pos as $p) {
$str = substr($str, 0, $p + $offset) . $insertstr . substr($str, $p + $offset);
$offset += $insertionLength;
}
return $str;
}
Cela ne fonctionne pas. Votre décalage suppose que $interstr ne comporte qu'un seul caractère. Vous devez ajouter un décalage en fonction de la longueur de l'insertstr, commencer par 0 et ajouter après le substr. De plus, vous devez trier les positions de bas en haut pour que cela fonctionne. J'ai corrigé votre fonction ici, vous pourriez vouloir modifier votre code : pastebin.com/g9ADpuU4
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.