Découpage d'une chaine de caractères en tableau de une case par caractère

Signaler
Messages postés
44
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
9 juin 2020
-
 nicotontige -
Bonjour,
Alors voilà j'ai une chaine de caractères comprenant des délimiteur de type "?" "=" "&".
Je vous donne un exemple:
- chaine = url.com?var1=mot1&var2=mot2
Je souhaite éclater l'url en récupérant mot1 et mot2.
Ensuite je veux éclater mot1 et mot2 en tableau de caractères avec un caractère par case.
Enfin comparer mot1 dans la base de données en comptabilisant les doublons.
Donc voilà je fais appel à codes sources pour m'aider...
Si vous avez des sources préexistantes ou les fonctions php pour effectuer ce script.
Merci d'avance pour votre coopération.

6 réponses

Messages postés
130
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
7 juin 2013

Bonjour,

En php, il suffit de note $str[0] pour avoir le caractère à la position 0 de la chaîne de caractère $str.

A partir de là, tu fais une boucle entre la position 0 et $str.lenght.
Tu fais un check sur toutes tes valeurs en vérifiant à chaque fois si c'est un '=' ou un '&'.
Et tout ce qui existe entre ces 2 caractères, tu peux le mettre dans un tableau.
Messages postés
44
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
9 juin 2020

Donc, si j'ai bien compris :
Je récupère mot1 (par exemple: "positif")
<?PHP
//Après je fais :
$str[0] = $mot1; // contient "p"
//Puis une boucle :
for($i=0;$i<=$str.lenght;$i++)//
{
$str[i] = $mot1;
}
//Et enfin j'utilise le tableau :
//$str[5] = "i";
echo $str; // renvoie "positif"
?>

C'est comme ça que je dois faire ?
$i<str.lenght ou $i<=str.lenght ?
Quand tu as récupérer le mot dans ta chaine $str, alors il suffit de faire $str[index_du_caractère].
Ex :
<?PHP
$str = "positif";
//Puis une boucle :
for( $i = 0 ; $i < strlen($str) ; $i++)//
{
echo $str[$i];
}
//affiche positif
?>
sinon, pour récupérer les mots, une solution (peut-être pas la meilleure, mais qui fonctionne) :
<?php
//on stocke la chaine dans la variable
$chaine = "url.com?var1=mot1&var2=mot2";

//on explose la chaine avec & comme séparateur
$pieces = explode("&", $chaine);

//boucle, tant qu'il y a des morceaux
for ($i = 0 ; $i < count($pieces) ; $i++ ) {
$miettes = explode("=", $pieces[$i]); //on explose avec comme séparateur =
$mot[$i] = $miettes[1]; //on enregistre la variable dans un tableau
}

for ($i = 0 ; $i < count($mot) ; $i++ ) {
echo $mot[$i]; //on effectue la fcontion que l'on veut sur les mots
}
?>
Messages postés
44
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
9 juin 2020

D'accord parfait j'ai la méthode plus ou moins et l'algorithmique donc ça va aller mais une dernière question:

Maintenant on prends plusieurs chaines :
Exemples :

$chaine1 = "url.com?var1=mot1&var2=mot2";
$chaine2 = "url.com?varx=mot3&vary=mot2";
$chaine3 = "url.com?varz=mot4&varw=mot3";

Je cherche une idée pour reconnaitre/comparer les doublons et récupérer sur chaine1 et chaine2 le mot2 et sur chaine2 et chaine3 le mot3.
En fait, c'est assez dur à expliquer c'est des url encodées avec différentes variables mais la meme valeur parfois, et je cherche donc à récupérer les mots les plus utilisés sur l'ensemble des url...

Donc d'abord :
1. Stocker toute l'url dans un tableau d'une case par caractère.
2. Exploser l'url en morceaux.
3. Comparer les doublons à l'aide du tableau de caractères et ainsi une autre boucle interne à l'explosion.
4. Reconstituer les mots qui sont reconnus en tant que doublon.

Je vais y travailler, je n'ai pas de délai particulier, je prends un maximum d'idées et dès que je peux je fais un premier jet voir ce que ça peut donner. En tout cas merci pour vos réponses et si vous avez d'autres idées ou optimisation, fonctions etc...n'hésitez pas.
pas très difficile, mais je ne vois toujours pas l'intérêt séparer les mots caractères par caractères.
Tu veux savoir quels sont les mots les plus utilisés si j'ai bien compris, alors pourquoi chercher par caractère ?

pour faire simple, il te suffit de faire un tableau avec pour index les mots
ex :
$tab["mot1"]
$tab["mot2"]

et de mettre en face le nombre d'occurence rencontré.
ex :
$tab["mot1"] = 2
$tab["mot2"] = 5

après un simple tri sur ton tableau permet de rechercher les plus utilisés, de faire un peu ce que tu veux.
L'algo sera de la sorte.

Quand mot trouvé
<?
if ( in_array($tab, $mot)) {
   $tab[$mot] += 1
} else {
   $tab[$mot] = 1
}
?>