<?php
$str = 'helloworld';
$newStr = '';
for($i=0;$i<strlen($str);$i++) {
if($i%2==0) {
$newStr .= $str[$i];
} else {
$newStr .= ' ';
}
}
echo $newStr;
?>
5 Réponses :
Il est facile à faire avec une expression régulière: Le point correspond à un caractère. Chaque deuxième caractère est remplacé par un espace. P> p>
Cela correspondra aux espaces blancs et blancs
@krasiPenkov, oui, et le point de vue ne mentionne rien des espaces blancs. La solution satisfait donc toujours les conditions décrites dans la question
Jusqu'ici, la meilleure réponse pour ce post
Essayez ceci, un peu plus court que le vôtre, mais est une doublure comme vous l'avez demandé.
Appelez-le un «doublure» pourrait être un étirement!
@aaaidan merci de votre commentaire constructif, ce que je cherchais ce matin. Toute autre perle de sagesse?
Oops désolé. Je ne voulais pas blesser les sentiments. J'espère que vous passez une bonne journée. :)
Semblable mais à l'aide de générateur
$str = 'helloworld';
$newstr ='';
foreach(range($str, strlen($str)-1, 2) as $i){
$newstr.=$str[$i].' ';
}
Tout d'abord, vous pouvez augmenter votre compteur par deux, de sorte que vous n'avez pas à vérifier si c'est étrange.
Deuxièmement, parce que les chaînes sont traitées comme des tableaux de caractères, vous pouvez accéder à un char en position $ i $ i avec $ str [$ i] code>. $str = "Hello World";
$newStr = $str;
for($i = 1; $i < strlen($str); $i += 2) {
$newStr[$i] = ' ';
}
echo $newStr;
Ou faire une copie de $ str i> premier, mais c'est l'idée.
Je pense qu'une technique de regex sera la plus propre, mais je montrerai un couple de plus à contraste.
la plus laborieuse de mon ensemble de techniques, l'approche multifonctionnelle divise la chaîne d'entrée dans une gamme de chaînes avec au plus 2 caractères, puis si la sous-chaîne a un second caractère, il est remplacé par un espace. avant d'être reconstitué à la chaîne reconstruite. p> li>
A code: ( démo ) p> sortie: p> Preg_replace () code> permet la solution d'appel unique et la plus concise. Le motif utilise le métacaracter \ k code> pour éliminer le besoin d'un groupe de capture (les groupes de capture coûtent des "étapes" supplémentaires, alors évitez-les quand sensibles). \ k code> signifie oublier les caractères précédemment appariés et redémarrez la "correspondance Fullstring" de ce point de la chaîne. En d'autres termes, il consomme les personnages étranges (par la définition de l'OP de «impair»), puis les écarts, puis correspond à tout autre octet Châtacter vient ensuite. P> Li>
pour code> La boucle est susceptible d'être la meilleure performance, mais n'est pas le type de script à lisage instantanément (qui dit que certaines personnes trouvent duregex difficile à lire). Remarque, il est important de ne pas appeler strlen () code> sur chaque itération. Pour éviter cela, cache la longueur avant la boucle ou dans le premier paramètre de la boucle. P> li>
ol>