Combinaisons PHP d'une chaine

Combinaisons PHP d'une chaine - PHP - Programmation

Marsh Posté le 02-06-2007 à 13:10:44    

Oui, le titre veut pas dire grand chose, je sais.
Voici ce que je voudrais faire.
 
Imaginons :
$string = "Hello World";
 
Je voudrais remplacer les o par des 0, mais sur le premier, sur le deuxieme, sur les deux..
 
L'idée c'est de recuperer ensuite
Hello World
Hell0 World
Hello W0rld
Hell0 W0rld
 
J'ai pensé à faire un str_split, mais je suis pas un expert en tableau, et je vois pas comment faire du tout.
 
Je sais c'est une question tres sogrenu, mais je suis tres curieux (et puis ça pourrait me servir pour autre chose).
 
Une idée ?
 
Merci d'avance ;)


Message édité par ZePRiNCE le 02-06-2007 à 13:11:06

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 13:10:44   

Reply

Marsh Posté le 02-06-2007 à 13:27:03    

Euh ...
 
Euh ...
 

Spoiler :

Euh ...


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 13:28:03    

ta d'autres conseils du genre?


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 13:28:15    

Euh ...

 

Edit : Enfin j'avais quand même commencé à répondre, à coup de "comptage de lettre", puis de monter le tout au carré, pour en faire une boucle ... et ensuite trouver le moyen suivant l'itération de la boucle de changer le caractères X, Y ou Z ... mais àa doit être chaud :o

 

Edit : ou alors il faut compter les chars, puis trouver leur position, et changer le 1er, puis le 2eme, puis le 3eme, puis le 4eme, puis le 1er ET le 2eme, puis le 2eme ET le 3eme etc...


Message édité par Dj YeLL le 02-06-2007 à 13:31:39

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 13:30:04    

tu te marres peutetre parce que je veux remplacer un o par un 0 c'est ça ?
c'est juste un exemple, qui me permettra ensuite tout seul de faire un truc plus complexe
 
J'ai simplifié au maximum mon probleme, je fais pas comme certains qui donnent tout leur code en bloc et demande la solution.
 
EDIT: je me disais qu'en utilisant 2 tableaux, et en les recombinant, c'etait peutetre possible.
Ca doit pas etre si chaud que ça si?


Message édité par ZePRiNCE le 02-06-2007 à 13:31:19

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 13:32:05    

2 tableaux ? c'est à dire ?


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 13:37:36    

Non, je viens de reflechir, ça marcherait pas avec deux (avec 4 pour 2 o a remplacer en fait)
 
L'idée serait de splitter en tableau la string.
le o se situe en [5] et en [7]
 
On copie le tableau1 dans tableau2, avec [5] qui devient O
On copie le tableau1 dans tableau3, avec [7] qui devient O
etc.
 
Plus j'y reflechi et plus ça me semble chaud.
Evidement je doute qu'il y ait pour le coup une fonction toute faite...


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 13:39:10    

Si, la fonction doit s'appeler un truc du genre : str_replace_under_drugs();
 
:D


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 13:40:01    

Reply

Marsh Posté le 02-06-2007 à 14:16:54    

Ja pas bien compris ton problème :/

Citation :

Je voudrais remplacer les o par des 0, mais sur le premier, sur le deuxieme, sur les deux..


tu veux dire SOIT sur le prmier, SOIT sur le deuxieme SOIT sur les deux ? en alternant ? ou  bien [:le kneu] ?

 


ya surement moyen de faire ketchoz avec les expressions rationnelles, si j'ai pas rien compris. Enfin j'ai pas tout compris c'est sur.


Message édité par theredled le 02-06-2007 à 14:23:01

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 14:16:54   

Reply

Marsh Posté le 02-06-2007 à 14:29:22    

Je veux dire alternativement sur aucun, sur l'un, sur l'autre, puis sur les deux
 
A partir de  
Hello World
 
Je veux recuperer
Hello World
Hell0 World
Hello W0rld
Hell0 W0rld  
 
Ensuite ça devra marcher aussi pour plus de 2 "o" a remplacer, genre Hello World Poto (mais ça ne change pa grand chose au probleme).
 
Tu as une idée ? :)


Message édité par ZePRiNCE le 02-06-2007 à 14:31:10

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 14:36:32    

Dac, et si t'as 4 "o", tu veux faire tous les solutions (oooo, Oooo, oOoo, ooOo, OOoo etc), ou que 4 (oooo, OOOO, oOoO, OoOo) ?

 

edit : il est joli mon post :D


Message édité par theredled le 02-06-2007 à 14:37:04

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 14:38:27    

Je veux faire toutes les solutions possibles, sans doublon :)


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 14:44:49    

ZePRiNCE a écrit :

Je veux faire toutes les solutions possibles, sans doublon :)


Ok
my method :
1) tu compte les nombre de "o" dans ton mot ($x)
2) tu génères toutes les solutions possibles de suites de $x * "o" (avec une fonction récursive ?)
3) tu génères chaque chaine a partir de chacune de ces solutions

 

je tente un truc si j'ai le tps :)


Message édité par theredled le 02-06-2007 à 14:45:12

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 14:51:57    

Ouais, je vois un peu l'idée, pour le 1) je crois que ça va aller..
Par contre apres, qu'appelle tu une fonction recursive ?
 
Si tu as le temps, c'est super :whistle:
Merci de ton aide !


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 15:31:09    

admettons que tu as ton $nombre_o (http://fr2.php.net/manual/fr/function.substr-count.php)

 

tu fais un truc style :

Code :
  1. function newPossib($pos) {
  2. global $nb_signes, $nb_cases, $tableau, $possib_en_cours;
  3. for ($i=0; $i<$nb_signes; $i++) {
  4.  $possib_en_cours[$pos-1] = $i;
  5.  if ($pos < $nb_cases) {
  6.   newPossib($pos+1);
  7.  }
  8.  else {
  9.   $tableau[] = $possib_en_cours;
  10.  }
  11. }
  12. }
  13. $tableau = array();
  14. $nb_signes = 2;
  15. $nb_cases = 4;
  16. $possib_en_cours = array();
  17. newPossib(1);


quelle abnégation de ma part :sweat:
(pas testé par contre) (et c'est l'idée, après c'est surement un poil crade)

 

Donc ce code énumère dans le tableau $tableau toutes les possibilités avec 2 chiffres possibles par case (0 et 1) et 4 cases.
Démerde toi tout seul pour comprendre comment ça marche :D

 

Après tu te sers de ce tableau de chiffres pour remplacer les o. (a mon avis c'est mieux si tu gardes un système de chiffres et qu'après seulement tu t'en serve pour remplcer dans tes chaines)

 

Et donc une fonction récursive c'est une fonction qui s'apelle elle-même, comme là.

 

Message cité 1 fois
Message édité par theredled le 02-06-2007 à 15:37:18

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 15:35:20    

Reply

Marsh Posté le 02-06-2007 à 15:42:30    

J'ai un peu de mal a comprendre ton nb_cases
C'est uniquement les o decoupé en tableau ?


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 15:45:54    

theredled a écrit :

admettons que tu as ton $nombre_o (http://fr2.php.net/manual/fr/function.substr-count.php)
 
tu fais un truc style :

Code :
  1. function newPossib($pos) {
  2. global $nb_signes, $nb_cases, $tableau, $possib_en_cours;
  3. for ($i=0; $i<$nb_signes; $i++) {
  4.  $possib_en_cours[$pos-1] = $i;
  5.  if ($pos < $nb_cases) {
  6.   newPossib($pos+1);
  7.  }
  8.  else {
  9.   $tableau[] = $possib_en_cours;
  10.  }
  11. }
  12. }
  13. $tableau = array();
  14. $nb_signes = 2;
  15. $nb_cases = 4;
  16. $possib_en_cours = array();
  17. newPossib(1);


quelle abnégation de ma part :sweat:  
(pas testé par contre) (et c'est l'idée, après c'est surement un poil crade)
 
Donc ce code énumère dans le tableau $tableau toutes les possibilités avec 2 chiffres possibles par case (0 et 1) et 4 cases.
Démerde toi tout seul pour comprendre comment ça marche :D
 
Après tu te sers de ce tableau de chiffres pour remplacer les o. (a mon avis c'est mieux si tu gardes un système de chiffres et qu'après seulement tu t'en serve pour remplcer dans tes chaines)
 
Et donc une fonction récursive c'est une fonction qui s'apelle elle-même, comme là.


 
 [:totoz]


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 15:49:04    

Reply

Marsh Posté le 02-06-2007 à 15:51:00    

ZePRiNCE a écrit :

J'ai un peu de mal a comprendre ton nb_cases
C'est uniquement les o decoupé en tableau ?


ben là dans mon code  il est pas question de "o" ou de chaine de caractères ou quoi que ce soit, il est juste question de faire un tableau avec chaque possibilité, chaque possibilité étant elle-même un tableau de ($nb_cases) cases.
 
En gros ça va te retourner dans $tableau :
 
0 => array(0, 0, 0, 0)
1 => array(0, 0, 0, 1)
2 => array(0, 0, 1, 0)
3 => array(0, 0, 1, 1)
4 => array(0, 1, 0, 0)
etc
 
et si tu mets $nb_cases = 2 et $nb_signes = 3 tu va avoir :
 
0 => array(0, 0);
0 => array(0, 1);
0 => array(0, 2);
0 => array(1, 0);
0 => array(1, 1);
0 => array(1, 2);
etc
 
(par ex si dans Hello World tu veux remplacer les o par des "o", "O", ou ":o" ) :o


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 15:51:34    


dans le sens ou je me suis pris la tete ou dans le sens ou c'est crado ? :/


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 15:53:51    

theredled a écrit :

dans le sens ou je me suis pris la tete ou dans le sens ou c'est crado ? :/


 
Dans le sens où tu t'es pris la tête :D
 
Donc ensuite tu fais une boucle sur le tableau. Et à l'itération 0,1,1,0 par exemple, ça veut dire qu'il faut remplacer le 2ème et le 3ème caractère par sa seconde forme, c'est exact ?


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 15:55:55    

Dj YeLL a écrit :

Dans le sens où tu t'es pris la tête :D

 

Donc ensuite tu fais une boucle sur le tableau. Et à l'itération 0,1,1,0 par exemple, ça veut dire qu'il faut remplacer le 2ème et le 3ème caractère par sa seconde forme, c'est exact ?


Y3P :sol:


Message édité par theredled le 02-06-2007 à 15:56:25

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 16:01:10    

Et le premier qui me trouve une fonction php native qui fait la même chose je le défonce [:totoz]


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 16:01:18    

Donc il faut coupler ça avec une tableau qui regroupe la position des différentes lettres :o
 
Genre si tu as 4 lettres, que les position sont 2, 8, 14, 25
 
0  1  1  0
2 8 14 25
 
Tu remplaces le caractère 8 et le caractère 14 \o/
 
V'la le border sur une phrase par contre, car c'est exponentiel ... :D


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 16:05:26    

Dj YeLL a écrit :

Donc il faut coupler ça avec une tableau qui regroupe la position des différentes lettres :o

 

Genre si tu as 4 lettres, que les position sont 2, 8, 14, 25

 

0  1  1  0
2 8 14 25

 

Tu remplaces le caractère 8 et le caractère 14 \o/


Ouey c'est cool ça, aussi :o

Dj YeLL a écrit :

V'la le border sur une phrase par contre, car c'est exponentiel ... :D


factorielle($le_nb_de_o) même, si mes souvenirs sont bons :o
En même temps c'est sacrément con déja à la base :D

Message cité 1 fois
Message édité par theredled le 02-06-2007 à 16:06:31

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 16:12:06    

c'est pas plutot 2^nb_de_o ?
2 car o ou O
 
j'essaie de trifouiller là, galere :/


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 16:14:04    

ZePRiNCE a écrit :

c'est pas plutot 2^nb_de_o ?
2 car o ou O
 
j'essaie de trifouiller là, galere :/


C'est tout à fait juste [:o_doc]
fuck you [:o_doc]


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 16:14:29    

theredled a écrit :

Ouey c'est cool ça, aussi :o
 
factorielle($le_nb_de_o) même, si mes souvenirs sont bons :o
En même temps c'est sacrément con déja à la base :D


 
Ohé, tu vas me parler autrement hein :o


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 16:26:17    

Pfiou, j'y capte vraiment rien :'(


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 16:28:03    

Pour compter le nombre d'occurence :
 
$str = 'Hello World';
$char = 'o';
 
$count = substr_count($str, $char);


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 16:28:59    

Oui, moi j'avais fait
 

Code :
  1. function puissance($x,$y) {
  2. $resultat=1;
  3. for ($i=0;$i<$y;$i++)
  4. $resultat *= $x;
  5. return $resultat;
  6. }
  7. $string="Hello Woorld";
  8. $nombre_o=substr_count($string,"o" );
  9. $combinaison=puissance(2,$nombre_o);


 
Donc là j'ai le nb d'occurences, et les combinaisons possible.. mais apres....  :pt1cable:

Message cité 1 fois
Message édité par ZePRiNCE le 02-06-2007 à 16:31:38

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 16:33:57    

ZePRiNCE a écrit :

Oui, moi j'avais fait
 

Code :
  1. function puissance($x,$y) {
  2. $resultat=1;
  3. for ($i=0;$i<$y;$i++)
  4. $resultat *= $x;
  5. return $resultat;
  6. }
  7. $string="Hello Woorld";
  8. $nombre_o=substr_count($string,"o" );
  9. $combinaison=puissance(2,$nombre_o);


 
Donc là j'ai le nb d'occurences, et les combinaisons possible.. mais apres....  :pt1cable:


Euh le nombre d'occurences possibles c'est tout simplement count($tableau) hein :D


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 16:35:35    

Elle marche au moins ma fonction, si tu mets un print_r($tableau) après ?


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 16:38:20    

Vi, ça fait 16 possibilités.
 
Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
        )
 
    [1] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 1
        )
 
    [2] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 1
            [3] => 0
        )
 
    [3] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 1
            [3] => 1
        )
 
    [4] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 0
            [3] => 0
        )
 
    [5] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 0
            [3] => 1
        )
 
    [6] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 1
            [3] => 0
        )
 
    [7] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 1
            [3] => 1
        )
 
    [8] => Array
        (
            [0] => 1
            [1] => 0
            [2] => 0
            [3] => 0
        )
 
    [9] => Array
        (
            [0] => 1
            [1] => 0
            [2] => 0
            [3] => 1
        )
 
    [10] => Array
        (
            [0] => 1
            [1] => 0
            [2] => 1
            [3] => 0
        )
 
    [11] => Array
        (
            [0] => 1
            [1] => 0
            [2] => 1
            [3] => 1
        )
 
    [12] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 0
            [3] => 0
        )
 
    [13] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 0
            [3] => 1
        )
 
    [14] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
            [3] => 0
        )
 
    [15] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
            [3] => 1
        )
 
)
 
J'ai du mal a voir comment concretiser ça..


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-06-2007 à 16:39:26    

T'as plus qu'à arranger ça pour qu'au lieu des 0 ça foute false, et qu'au lieu des 1 ça foute la position du caractères :o


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2007 à 16:40:38    

tin c'est la première fois que je code sur papier et que ça marche direct [:le kneu]
 
Ben après tu fais le truc de Dj Yell, tu bloque où ?


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 16:41:53    

Dj YeLL a écrit :

T'as plus qu'à arranger ça pour qu'au lieu des 0 ça foute false, et qu'au lieu des 1 ça foute la position du caractères :o


Ou tout simplement qu'au lieu des 0 ça foute "o", et au lieu des 1 ca foute "O" :o

 

edit : ah oui nan ok j'ai pigé, mais du coup ça marche pas si il veut mettre "o", "O", "0", et ":o"

Message cité 2 fois
Message édité par theredled le 02-06-2007 à 16:43:58

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 02-06-2007 à 16:41:55    

Ben je suis pas un expert en tableau du tout
A la base les tableaux je m'en sers pour recuperer des données mysql, mais rien d'autre.
Bref, je suis novice en tableau php.
 
Je vais essayer de faire ce que Dj Yell a dit :)
EDIT: theredled, ouaip plutot, je crois que j'ai compris :)


Message édité par ZePRiNCE le 02-06-2007 à 16:42:29

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed