9
votes

Moyen le plus simple de remplacer tous les caractères dans des positions même dans une chaîne.

<?php

$str = 'helloworld';
$newStr = '';
for($i=0;$i<strlen($str);$i++) {
    if($i%2==0) {
        $newStr .=  $str[$i];
    } else {
           $newStr .= ' ';
    }
}

echo $newStr;

?>

0 commentaires

5 Réponses :


10
votes

Il est facile à faire avec une expression régulière: xxx

Le point correspond à un caractère. Chaque deuxième caractère est remplacé par un espace.


3 commentaires

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



2
votes

Essayez ceci, un peu plus court que le vôtre, mais est une doublure comme vous l'avez demandé. XXX


3 commentaires

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. :)



1
votes

Semblable mais à l'aide de générateur

$str = 'helloworld';
$newstr ='';
foreach(range($str, strlen($str)-1, 2) as $i){
$newstr.=$str[$i].' ';
}


0 commentaires

3
votes

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;


1 commentaires

Ou faire une copie de $ str premier, mais c'est l'idée.



0
votes

Je pense qu'une technique de regex sera la plus propre, mais je montrerai un couple de plus à contraste.

  1. Preg_replace () permet la solution d'appel unique et la plus concise. Le motif utilise le métacaracter \ k 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 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.

  2. 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.

  3. A pour 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 () sur chaque itération. Pour éviter cela, cache la longueur avant la boucle ou dans le premier paramètre de la boucle.

    code: ( démo ) xxx

    sortie: xxx


0 commentaires