Bonjour!
Cette source me sert à simplifier mes bases de données (et par la même occasion mes requêtes) en enregistrant tous mes paramètres dans une seule variable.
Pour être plus clair, un exemple:
J'ai une structure de configuration comme ca:
$configuration['envoi_mail']='oui' ou 'non';
$configuration['ouvrir_sur']= 'index', 'forum', 'news' ou 'chat';
$configuration['presentation']= 'style_1', 'style_2', ...;
Par exemple, 47 donnera $config['envoi_mail']='oui', $config['ouvrir_sur']='forum' et $config['presentation']='style_3'...
Les deux fonctions (creer_config() et recupconfig()) vous permettent de créer le nombre qui correspond à la config choisie, grace à une chaine binaire. Un bouleen sera donc 0 ou 1, un choix entre 4 possibilité sera 00,01,10 ou 11. Mais en automatique.
La première fonction crée le nombre associé à la config passée en paramètre, la seconde récupère la config en fonction du nombre en paramètre, dans un tableau.
Un exemple concrêt est dans après le code.
Source / Exemple :
//Les fonctions:
function recup_config($nombre,$structure,$nb_total_bits)
{
//On convertit la valeur en binaire
$bin = base_convert($nombre,10,2);
//index est la position des bits à lire. Le premier est inutilisé mais sert à conserver une chaine de longueur fixe
$index = 1;
foreach($structure as $cle=>$val)
{//Pour chacune des propriétés
if (!isset($val['max']))
{//Le maximum n'est pas défini, on le calcule donc
$nb_possibilites = count($val)-1;//-1 à cause du ['nom']
$nb_bits = strlen(base_convert($nb_possibilites-1,10,2));//-1 car le premier index est 0
}
else
{//Le maximum est défini, on le récupère alors
$nb_bits = strlen(base_convert($val['max']-1,10,2));//-1 car le premier index est 0
}
//Dans $bin, on récupère les $nb_bits caractères à partir de $index
$valeur = substr($bin,$index,$nb_bits);
//On attribue la valeur lue dans le tableau $val à l'indice $valeur (converti en base 10) au champs de même nom du tableau de sortie
$conf[$val['nom']] = $val[base_convert($valeur,2,10)];
//On avance l'index $index de $nb_bits
$index = $index + $nb_bits;
}
//On retourne $conf
return $conf;
}
function creer_config($config,$structure_configuration)
{
$indice = 0; //Indice dans $structure_configuration
$retour = '1'; //On insère un 1 en début de chaine pour éviter tout problème avec une éventuelle valeur 0 ou 01 pour le premier paramètre, ce qui décallerait tout
foreach($config as $cle=>$val)
{//On parcourt $config, la config à enregistrer
if (!isset($structure_configuration[$indice]['max']))
{//Le maximum n'est pas défini, on le calcule donc
$nb_possibilites = count($structure_configuration[$indice])-1;//-1 à cause du ['nom']
$nb_bits = strlen(base_convert($nb_possibilites-1,10,2));//-1 car le premier index est 0
}
else
{//Le maximum est défini, on le récupère alors
$nb_bits = strlen(base_convert($structure_configuration[$indice]['max']-1,10,2));//-1 car le premier index est 0
}
//On recherche $val, la valeur de la propriété à enregistrer, dans $structure_configuration[$indice]
$lacle = array_search($val,$structure_configuration[$indice]);
//On convertit la clé en valeur binaire
$ajout = base_convert($lacle,10,2);
//On rajoute les éventuels 0 en début de chaine
$ajout = str_pad($ajout, $nb_bits, "0", STR_PAD_LEFT);
//On concatène
$retour .= $ajout;
//On passe à l'indice suivant
$indice++;
}
//On renvoie la valeur en base 10
return base_convert($retour,2,10);
}
// EXEMPLE D'UTILISATION:
On crée la structure de toutes les paramètres possibles
$structure_configuration[0]['nom'] = 'envoi_mail'; //Le nom de la variable 0
$structure_configuration[0][0] = 'oui'; //Première possibilité pour 0
$structure_configuration[0][1] = 'non'; // Deuxième possibilité pour 0
$structure_configuration[1]['nom'] = 'ouvrir_sur'; //Le nom de la variable 1
$structure_configuration[1][0] = 'index'; //...
$structure_configuration[1][1] = 'forum';
$structure_configuration[1][2] = 'news';
$structure_configuration[1][3] = 'chat';
$structure_configuration[2]['nom'] = 'presentation';
$structure_configuration[2][0] = 'style_1';
$structure_configuration[2][1] = 'style_2';
$structure_configuration[2][2] = 'style_3';
$structure_configuration[2][3] = 'style_4';
$structure_configuration[2]['max'] = 8; //On prévoit la possibilité d'inserer jusqu'à 8 styles
$nombre = 114; //Nombre récupéré dans mysql (par exemple) qui définit comment interagit le site pouyr une personne en particulier
echo '<b>Envoi: '.$nombre.'</b><br />'."\n";
$config = recup_config($nombre,$structure_configuration,$max);
echo 'Détail de la config: ';
print_r($config);
echo '<br />'."\n";
$num_enregistre = creer_config($config,$structure_configuration);
echo '<b>Retour: '.$num_enregistre.'</b><br>'."\n";
Conclusion :
Voila!
Une fois créé le tableau $structure_configuration, il est très simple de mettre en place un formulaire de configuration, dont les données seront insérées dans $config, pour enregistrer la configuration, par exemple dans mysql.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.