parser un string pr en faire un tableau

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : parser un string pr en faire un tableau

Re: parser un string pr en faire un tableau

par titicaca » 30 déc. 2011, 16:09

ok ok merci
vos 2 solutions fonctionnent.
Je me doute bien que le séparateur est mal choisit mais en fait cet algorithme me sert a faire qq chose de plus compliqué. Mon exemple livre-chapitre-page était pour expliquer facilement. En fait j'ai fait un système de drag and drop en jquery. Et ce string que j'utilise me retourne le nombre d'élément père et fils ( si il ya une arborescence) qui ont été déplacé tout en gardant la notion d’arborescence. Je peux donc maintenant la stocker dans une BDD

Re: parser un string pr en faire un tableau

par sirakawa » 30 déc. 2011, 14:21

Autre solution, testée et un peu commentée pour tenter d'éclaircir les choses:
<?PHP
/* définition de séparateurs permettant de généraliser plus facilement 
* quand on a su résoudre un cas particulier, il faut chercher une solution générale
*/
$separateur_1= "|";
$separateur_2 = ",";
$chaine = "M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80"; 


$tableau_brut = explode ($separateur_1, $chaine);
print "<br >Le tableau résultant (les tableaux à remplissage automatique de PHP commence à l'indice 0 ) :<br />";
print_r($tableau_brut);
/* tableau_brut[0 ] contient une chaine des titres de chapitres séparés par des virgules
 transformation de cette chaine en tableau en se fiant à separateur_2
 */
$chapitres = explode($separateur_2, $tableau_brut[0]);
print "<br > le tableau des chapitres :<br />";
print_r($chapitres);
// on n'a plus besoin de l'élément 0 de tableau_brut
array_shift ($tableau_brut); // on se débarasse des chapitres
print "<br >Le tableau résultant élagué ne contient que les listes de numéros de pages et commence aussi à 0:<br />";
print_r($tableau_brut);
/* fabrication d'un tableau à partir de deux (array_combine supposant que les deux tableaux sont de la même longueur, il serait de bon goût de faire un test de longueur (en se servant de count($chapitres) == count($tableau_brut))*/
$sommaire = array_combine ( $chapitres , $tableau_brut );
print "<h2>Voici le sommaire:</h2>";
print_r($sommaire);
print "<hr>";
/* à part que la chaine est mal  conçue...
* serait mieux avec un séparateur différent entre le dernier nom de chapitre et le permier numéro de page
* on pourrrait alors extraire deux tableaux et les combiner
*/
$chaine_1 = "M120,M11||92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80"; 
$brut = explode ("||", $chaine_1);
$chaps = explode(",", $brut[0]);
$pages = explode ("|", $brut[1]);
$somm = array_combine($chaps, $pages);
print "<h2>SOMMAIRE</h2>";
print_r($somm);
?>

Re: parser un string pr en faire un tableau

par titicaca » 30 déc. 2011, 13:13

Quelle réactivité :p
J'essaye de comprendre ce que tu m'a donné, j adapte et je test

Re: parser un string pr en faire un tableau

par xTG » 30 déc. 2011, 13:03

Si je comprends bien :
$tmp = explode('|', $string);
$chapitresTmp = explode(',',$tmp[0]);
$livre = array();
foreach($chapitresTmp as $index => $chapitre){
  $pages = array();
  if( isSet($tmp[$index + 1]) )
    $pages = explode(',',$tmp[$index + 1]);
  $livre[$chapitre] = $pages;
}
(script non testé)

parser un string pr en faire un tableau

par titicaca » 30 déc. 2011, 12:50

Bonjour,

J'ai un petit soucis et j'aimerais vos lumières
Je récupère un string relativement complexe et assez long( pr moi)

Exemple tronqué:
M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80

Ce que je voudrais faire c parser ce string pour en faire un tableau manipulable.

Les règles étant:

Ce qui précède le premier | et qui commence donc par un M est un chapitre dirons nous. (séparé par une virgule)
Ensuite, par exemple pour le chapitre M120 on veut lui associer les pages 92,93,94,95,96,97,98,99,100
pour le chapitre suivant M11, on veut lui associer 72,73,74,75,76,77,78,79,80.

Donc l'idée serait de faire un truc comme ca :

M1,M2,M3|1,2,3|4,5,6|7,8,9

Le plus simple serait surement d'en faire un tableau associatif, mais j'arrive pas trop à m'y prendre.