Ce devrait être la réponse acceptée. Les fonctions intégrées ont priorité sur les fonctions créées par l'utilisateur à tout moment.
Benjam
13
Oui, le 4ème argument étant "0", la chaîne de remplacement est insérée sans écraser la chaîne d'origine.
Buttle Butkus
7
Réponse brillante. Mais pour les gens paresseux (comme moi), il devrait y avoir une courte explication dans votre message. Je vais le faire maintenant et copier-coller à partir de php.net: "Bien sûr, si la longueur est nulle, cette fonction aura pour effet d'insérer le remplacement dans la chaîne au décalage de début donné."
Wolfsblvt
7
Attention: la fonction substr_replace () n'est pas sûre sur plusieurs octets! Votre $ pos peut s'avérer être au milieu d'un caractère UTF-8. Vous devrez peut-être utiliser la solution @ tim-cooperer mais en utilisant mb_substr ().
Utilisez la fonction stringInsert plutôt que la fonction putinplace. J'utilisais la fonction ultérieure pour analyser une requête mysql. Bien que la sortie semble correcte, la requête a entraîné une erreur qui m'a pris un certain temps à retrouver. Ce qui suit est ma version de la fonction stringInsert ne nécessitant qu'un seul paramètre.
@minitech L'op a dit using strpos to get the position of a substring, donc substringvient en premier. Et il n'a pas dit de trouver un seul poste.
xdazz
3
J'ai une ancienne fonction pour ça:
function putinplace($string=NULL, $put=NULL, $position=false){
$d1=$d2=$i=false;
$d=array(strlen($string), strlen($put));if($position > $d[0]) $position=$d[0];for($i=$d[0]; $i >= $position; $i--) $string[$i+$d[1]]=$string[$i];for($i=0; $i<$d[1]; $i++) $string[$position+$i]=$put[$i];return $string;}// Explanation
$string='My dog dont love postman';// string
$put="'";// put ' on position
$position=10;// number of characters (position)
print_r( putinplace($string, $put, $position));//RESULT: My dog don't love postman
Il s'agit d'une petite fonction puissante qui remplit parfaitement son rôle.
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 fait l'insertion sur chacune d'entre elles, alors voici:
EDIT: On dirait que mon ancienne fonction supposait qu'il$insertstrn'y avait qu'un seul caractère et que le tableau avait été trié. Cela fonctionne pour une longueur de caractère arbitraire.
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 le faire fonctionner. J'ai corrigé votre fonction ici, vous voudrez peut-être modifier votre code: pastebin.com/g9ADpuU4
Matthias S
@MatthiasS merci, la prochaine fois juste modifier ou suggérer de modifier, je n'ai pas remarqué cela jusqu'à 2 ans plus tard
$posEndest inutile. La question concernait l'insertion d'une sous-chaîne après la position spécifiée.
Styx
Oui, mais j'ai créé cette fonction pour mon projet. où j'avais besoin à un endroit de remplacer et dans un autre juste insérer. Ma fonction fonctionne également pour cette question, donc je ne peux pas comprendre pourquoi vous m'avez fait moins?
Ivan Ivan
0
Des réponses étranges ici! Vous pouvez facilement insérer des chaînes dans d'autres chaînes avec sprintf [lien vers la documentation]. La fonction est extrêmement puissante et peut également gérer plusieurs éléments et d'autres types de données.
$color ='green';
sprintf('I like %s apples.', $color);
C'est zonte. mais il ne gère pas une approche programmatique. Nous avons généralement 'I like apples.'comme variable. Nous devons donc insérer d' %sabord dans la chaîne, ce qui revient au problème d'origine
substr
sur PHP Manualla source
Essayez-le, cela fonctionnera pour n'importe quel nombre de sous-chaînes
la source
Utilisez la fonction stringInsert plutôt que la fonction putinplace. J'utilisais la fonction ultérieure pour analyser une requête mysql. Bien que la sortie semble correcte, la requête a entraîné une erreur qui m'a pris un certain temps à retrouver. Ce qui suit est ma version de la fonction stringInsert ne nécessitant qu'un seul paramètre.
la source
la source
using strpos to get the position of a substring
, doncsubstring
vient en premier. Et il n'a pas dit de trouver un seul poste.J'ai une ancienne fonction pour ça:
Il s'agit d'une petite fonction puissante qui remplit parfaitement son rôle.
la source
C'était ma solution simple, aussi ajouter du texte à la ligne suivante après avoir trouvé le mot-clé.
Production:
la source
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 fait l'insertion sur chacune d'entre elles, alors voici:
EDIT: On dirait que mon ancienne fonction supposait qu'il
$insertstr
n'y avait qu'un seul caractère et que le tableau avait été trié. Cela fonctionne pour une longueur de caractère arbitraire.la source
Une manière simple et différente de résoudre:
la source
la source
$posEnd
est inutile. La question concernait l'insertion d'une sous-chaîne après la position spécifiée.Des réponses étranges ici! Vous pouvez facilement insérer des chaînes dans d'autres chaînes avec sprintf [lien vers la documentation]. La fonction est extrêmement puissante et peut également gérer plusieurs éléments et d'autres types de données.
vous donne la chaîne
la source
'I like apples.'
comme variable. Nous devons donc insérer d'%s
abord dans la chaîne, ce qui revient au problème d'origine