Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction pour éclater un tableau

4 réponses
Avatar
Stéphane Santon
Bonjour,

J'ai une variable texte qui contient :

$filtre= 'article=477,rubrique=201,branche=25';

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

?

Je peux faire un explode pour avoir
0 => 'article=477'
1 => 'rubrique=201'
2 => 'branche=25'

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

4 réponses

Avatar
Didier
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.
Avatar
Stéphane Santon
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
Avatar
Olivier Miakinen
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
Avatar
Olivier Miakinen
[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