Fonction pour éclater un tableau

Le
Stéphane Santon
Bonjour,

J'ai une variable texte qui contient :

$filtre= 'articleG7,rubrique 1,branche%';

Comment arriver simplement à un tableau qui contient :
'article' => 477
'rubrique' => 201
'branche' => 25

?

Je peux faire un explode pour avoir
0 => 'articleG7'
1 => 'rubrique 1'
2 => 'branche%'

Mais je n'ai pas de fonction magique pour la suite (sauf à un code plus
complet qui détecte le '=', et patati)

Si Php dispose de fonction permettant de le faire plus facilement en
remplaçant le '=' de la chaine de départ, je peux le changer, c'est une
chaine de configuration que je peux changer.

Merci




--
Stéphane
BTS Electrotechnique *** http://www.bts-electrotechnique.fr
En alternance : http://www.ufa-palissy.fr
Domotique : http://www.ecodomotique.fr
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Didier
Le #26545242
Le 02/05/2020 à 16:04, Stéphane Santon a écrit :
Bonjour,
J'ai une variable texte qui contient :
$filtre= 'articleG7,rubrique 1,branche%';
Comment arriver simplement à un tableau qui contient :
'article' => 477
'rubrique' => 201
'branche' => 25
?
Je peux faire un explode pour avoir
0 => 'articleG7'
1 => 'rubrique 1'
2 => 'branche%'
Mais je n'ai pas de fonction magique pour la suite (sauf à un code plus
complet qui détecte le '=', et patati...)
Si Php dispose de fonction permettant de le faire plus facilement en
remplaçant le '=' de la chaine de départ, je peux le changer, c'est une
chaine de configuration que je peux changer.
Merci

Bjr,
à mon petit niveau en php, je ne vois qu'un deuxième tableau construit
dans une boucle foreach sur le premier :
$tab1=explode(',',$filtre);
$tab2=array();
foreach($tab1 as $chaine)
{
$tabchaine=explode('=',$chaine);
$tab2[$tabchaine[0]]=tabchaine[1];
}
Didier.
Stéphane Santon
Le #26545262
Bonjour,
Didier a écrit :
Le 02/05/2020 à 16:04, Stéphane Santon a écrit :
$filtre= 'articleG7,rubrique 1,branche%';
Comment arriver simplement à un tableau qui contient :
'article' => 477
'rubrique' => 201
'branche' => 25

à mon petit niveau en php, je ne vois qu'un deuxième tableau construit dans
une boucle foreach sur le premier :
$tab1=explode(',',$filtre);
$tab2=array();
foreach($tab1 as $chaine)
{
$tabchaine=explode('=',$chaine);
$tab2[$tabchaine[0]]=tabchaine[1];
}
Didier.

Merci pour le code.
Je cherchais une fonction évoluée de php qui fasse ça.
J'ai pensé ensuite à voir si Explode fonctionnait directement sur des
tableaux, mais non...
--
Stéphane
BTS Electrotechnique *** http://www.bts-electrotechnique.fr
En alternance : http://www.ufa-palissy.fr
Domotique : http://www.ecodomotique.fr
Olivier Miakinen
Le #26545272
Bonjour,
Le 02/05/2020 16:04, Stéphane Santon a écrit :
J'ai une variable texte qui contient :
$filtre= 'articleG7,rubrique 1,branche%';
Comment arriver simplement à un tableau qui contient :
'article' => 477
'rubrique' => 201
'branche' => 25
?

Je propose la chose suivante (attention, non testé) :
preg_match_all("/([a-z]+)=([0-9]+)/", $filtre, $matches);
$resultat = array_combine($matches[1], $matches[2]);
Il faudra bien sûr adapter la regexp si les clés peuvent contenir d'autres
caractères que les lettres minuscules ASCII [a-z] ou si les valeurs peuvent
contenir autre chose que des chiffres [0-9].
Faire aussi attention au fait que les valeurs risquent d'être de type string
même si elles ne contiennent que des chiffres. Voir éventuellement la fonction
array_map.
Cordialement,
--
Olivier Miakinen
Olivier Miakinen
Le #26545360
[copie et suivi vers fr.comp.usenet.lecteurs-de-news]
Le 02/05/2020 21:30, Stéphane Santon avait dans son champ Subject :
Subject: Re: Re: Fonction pour éclater un tableau

Alors que le champ Subject de Didier était :
Subject: =?UTF-8?Q?Re:_Fonction_pour_éclater_un_tableau?

C'est un bug connu de la version 1.08.03 de MesNews. Quand il rencontre
un signe = suivi de deux caractères qui sont de l'hexadécimal mais avec
une lettre a-f en minuscule, il devrait soit considérer que c'est légal
et équivalent aux lettres en majuscule (ce que font tous les autres
logiciels), soit considérer que c'est illégal et refuser de décoder le
reste. Or il ne fait ni l'un ni l'autre : il considère que c'est légal
mais il ne décode pas l'hexadécimal, ce qui fait perdre l'information.
Heureusement ça a été corrigé dans la version 1.08.06.
--
Olivier Miakinen
Publicité
Poster une réponse
Anonyme