Je veux savoir comment faire pour renommer des clés dans un tableau associatif.
en fait j'aimerais pouvoir enlever des '_' dans des noms de clés pour pouvoir ensuite mettre des majuscules entre certains mots pour avoir des noms plus clairs (je précise que je récupère des données d'une base de données).
J'ai fais quelque chose qui fonctionne sauf je ne trouve pas ça très 'clean'.
<?php
$donnees = array('id_activite' => '4', 'nom_activite' => 'natation');
var_dump($donnees);
$cleMaj = array();
$temp = array();
$newKeys =array();
//éclatement et récupération des noms de clés dans un tableau
foreach($donnees as $cle => $value)
{
$tab = explode('_', $cle);
$cleMaj[] = $tab;
}
//mise en majuscule des premières lettres
for($i=0; $i<sizeof($cleMaj); $i++)
{
for($j = 0; $j <sizeof($cleMaj[$i]); $j++)
{
$temp[$i][$j] = ucfirst($cleMaj[$i][$j]);
}
}
var_dump($temp);
//réassemblage des nouvelles clés
for($i=0; $i<sizeof($temp); $i++)
{
$newKeys[$i] = implode('', $temp[$i]);
}
var_dump($newKeys);
?>
à votre avis peut on faire mieux et si oui avec quelles fonctions de php ? j'aimerais bien faire quelque chose qui fasse moins usine à gaz car c'est pour insérer les données récupérées dans des objets lors de leur création.
Voici un petit script, j'ai commenté histoire que tu comprennes le principe n’hésite pas à demander si tu veux plus d'explication :)
$donnees = array('id_activite' => '4', 'nom_activite' => 'natation', 'test' => 'fefe');
foreach ($donnees as $key => $value) {
$pattern = '#(_[a-zA-Z])+#';
// Si il existe au moins une valeur du type xxx_yxxx
// On recherche les valeurs _y
if(preg_match($pattern, $key)){
// recupere l'ensemble des valeurs _x
preg_match_all($pattern, $key, $finds);
// On passe _x a _X
$newFinder = array_map('strtoupper', $finds[0]);
// Creation du tableau _x => X
$newFinder2 = [];
foreach ($newFinder as $k){
$newFinder2[strtolower($k)] = str_replace('_','', $k);
}
// On remplace dans la chaine yy_xyyy par yyXyyy
$newKey = strtr($key, $newFinder2);
// On remplace l'ancienne cle par la nouvelle
unset($donnees[$key]);
$donnees[$newKey] = $value;
}
}
Merci pour vos réponses qui fonctionnent bien pour deux d'entre elles (je les garde sous le coude pour savoir laquelle prendre et les étudier encore un peu).
Celle de philodick ne fonctionne qu'en partie car le code ne fonctionne pas au delà de d'un underscore trouvé et n'affiche pas la clé quand il n'y en a pas non plus. C'était pourtant tentant . pour l'instant, je ne ne vois pas ce qui cloche hormis les indices numériques qui au delà de 1 plante le code.
C'est déjà sympa d'avoir proposé une solution. D'autant plus que tu avais indiqué que ce n'était pas testé.
De plus j'ai fais un bouclage comme tu as dit . Je ne sais pas si c'était ce que tu aurais fait mais voilà une solution.
j'ai repris le principe de l'implode à la fin
<?php
$donnees = array('id_activite' => '4', 'nom_activite' => 'natation', 'infos' =>'blablabla', 'date_de_l_activite' => '24/05/2018');
var_dump($donnees);
foreach($donnees as $key => $value)
{
//on retire les '_'
$explkey = explode('_',$key);
//si explode ne trouve pas de '_', il n'y a qu'un nom de clé dans ce cas le tableau n'a qu'un élément
if(sizeof($explkey) == 1)
{
$newdonnees[$explkey[0]] = $value;
}
else
{
//Sinon on parcourt le tableau en partant du second élément
for($i=1; $i<sizeof($explkey); $i++)
{
//on transforme en majuscule la première lettre de l'élément i que l'on met dans un tableau
$majkey[$i] = ucfirst($explkey[$i]);
var_dump($majkey);
}
//une fois la transformation faite on rassemble les éléments pour former les nouvelles clés
//que l'on oublie pas de concaténer avec l'élément 0 du tableau
$newkey = implode('', $majkey);
$newdonnees [$explkey[0].$newkey] = $value;
}
}
var_dump($newdonnees);
Je l'ai testé et elle prend tous les cas (enfin je crois pour ce qui correspond à mon problème :)) et elle certainement perfectible.
Pendant que j'y suis, étant donnée que je dois m'en servir pour initialiser mes objets via le constructeur, comment faire pour éviter de dupliquer le code pour toutes les classes ? un require () dans les classes est une bonne technique ?
Ok merci quenti77, pour le lien, je vais m'en inspirer.
Je pense que ça va bien m'aider.
merci pour votre aide.
renommer des clés dans un tableau associatif
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL
N'oubliez pas d'activer les erreurs PDO.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL