Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2011, 11h52   #1
Invité régulier
 
Inscription : décembre 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 17
Points : 8
Points : 8
Par défaut parser un string pr en faire un tableau

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

M1 associé a 1,2,3 M2 à 4,5,6 et M3 à 7,8,9

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

Merci de votre aide, et bonne année !!
tryptan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 12h15   #2
Membre du Club
 
Femme Adeline
Consultant informatique
Inscription : décembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Nom : Femme Adeline
Âge : 30
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : décembre 2011
Messages : 20
Points : 44
Points : 44
voila un exemple de code:
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$chaine="M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80";
 
$tab=array();
 
 
$separateur=strpos($chaine, '|');
$chapitre=explode(',',substr($chaine,0,$separateur));
$chaine=substr($chaine,$separateur+1);
 
 
foreach($chapitre as $chap)
{
	$separateur=strpos($chaine, '|');
	if ($separateur!=0)
		$tab[$chap]=explode(',',substr($chaine,0,$separateur));
	else
		$tab[$chap]=explode(',',$chaine);
	$chaine=substr($chaine,$separateur+1);
}
 
var_export($tab);
je suis parti de ton exemple et j'ai laisser le var_export à la fin pour que tu puisses voir ce qu'il y a dans $tab.
PtiteA2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2011, 13h21   #3
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,
tu peux aussi faire comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
$array = 'M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80';
 
$data = explode('|', $array);
$chap = explode(',', $data[0]);
$book = array();
foreach($chap as $num) {
   $book[$num] = next($data);
}
print_r($book); // array("M120" => "92,93,94,95,96,97,98,99,100", "M11" => "72,73,74,75,76,77,78,79,80")
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 15h05   #4
Invité régulier
 
Inscription : décembre 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 17
Points : 8
Points : 8
nickel merci bien
tryptan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 22h15   #5
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
très instructif, vu que je ne connaissais pas la fonction PHP "next" ; petite question pour améliorer ma compréhension : qu'est-ce qui fait qu'au premier appel de "next($data)", le pointeur du tableau soit initialisé sur $data[1] ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 08h55   #6
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Non, next() ne réinitialise pas le pointeur. Comme chaque tableau à un pointeur interne, il se contente de partir de la dernière position connue.

Ah, tryptan voulait un tableau de tableau, cela donne avec next():
Code :
1
2
3
4
5
6
7
8
9
10
<?php
 
$array = 'M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80';
 
$data = explode('|', $array);
$chap = explode(',', $data[0]);
$book = array();
foreach($chap as $num) {
   $book[$num] = explode(',', next($data));
}
Comme tu peux le voir, dans ce code, la dernière position utilisée dans le tableau $data est 0 donc le premier appel à next() renverra $data[1] et ainsi de suite...
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2012, 09h10   #7
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Merci pour l'explication.
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h26.


 
 
 
 
Partenaires

Hébergement Web