[RESOLU] Couleur aléatoire dans un tableau identique pour une même chaine

Eléphant du PHP | 385 Messages

02 nov. 2016, 17:02

Bonjour à tous,

Je suis encore sur mon projet d'inventaire, j'aimerais enfaîte que dans mon tableau sur une colonne est des couleurs différents selon les chaînes.
Pour la génération de la couleur aucune problème

Code : Tout sélectionner

function RandomCouleur(){ $r=dechex(rand(0,255)); $v=dechex(rand(0,255)); $b=dechex(rand(0,255)); return "#".$r.$v.$b; }
la ou c'est plus difficile c'est pour l'affectation de la couleur aux cellules du tableau. Ce que je souhaite faire c'est

Code : Tout sélectionner

$statut = 'SELECT DISTINCT STATUT FROM INVENTAIRE';
ici je récupère les chaines différents et je veux par rapport à ces chaines dans mes cellules une couleur affecter pour chaque chaine.
sur cette ligne

Code : Tout sélectionner

print '<td contenteditable="false" id="statut'.$produit['id_inventaire'].'">'.$produit['statut'].'</td>';
Je bug un peux sur comment affecter une couleur a une chaîne, je pense a un tableau à deux dimensions avec chaîne et couleur. Mais après je dois parcourir le tableau pour voir si la chaine y est et récupérer la couleur. Vous pourriez m'aider?

Eléphanteau du PHP | 10 Messages

02 nov. 2016, 17:20

essaye avec un switch(){
case :
break;
}

Eléphanteau du PHP | 10 Messages

02 nov. 2016, 17:31

$query = " SELECT distinct statut from inventaire";
$result = $DB->numrows($query);

    while ($statut = $DB->fetch_assoc($result)) {
        switch ($statut) {
            case 1:
                echo"<th color='black' bgcolor='#ffffff'> </th>"; 
                break;

            case 2:
                echo"<th color='black' bgcolor='##ffe0e0'> </th>"; 
                break;

            case 3:
                echo"<th color='black' bgcolor='#ffff22'> </th>";
                break;
        }
// quelque chose de ce genre

Eléphant du PHP | 385 Messages

02 nov. 2016, 21:40

Merci, par contre ce son des chaines de caractères par exemple hs ou valide, donc si je m'est un switch c'est static. Moi je pensais à quelque chose ou je récupère le nom puis je l'associe à une couleur, ensuite dans la génération de mon tableau je regarde c'est quoi le statut et il correspond à quel couleur dans mon tableau.

comment je peux faire la correspondance chaine => couleur et après dans ma boucle pour générer le tableau si chaine = chaine alors je récupère couleur?

Merci encore pour l'aide.

Eléphant du PHP | 176 Messages

02 nov. 2016, 22:14

Bonsoir,

A la limite tu peux déclarer une classe css pour chacune des chaînes, classes qui portera le même nom que tes différentes chaînes de caractères
<style>
.hs { background-color:red;}
.valide{background-color:green;}
</style>
Et le php qui va avec
print '<td contenteditable="false"   class="'.$chaine.'">'.$produit['statut'].'</td>';
Ou $chaine vaut hs ou valide
Ainsi si $chaine vaut hs la case est rouge, si elle vaut valide elle est verte
Cordialement
Naroth

Petit nouveau ! | 9 Messages

02 nov. 2016, 22:46

Bonsoir,

Voici une solution qui utilise ta fonction RandomCouleur.
<?php

$colors = [];

// ... Dans ta boucle
    if (!array_key_exists($status, $colors)) {
        $colors[$status] = RandomCouleur();
    }
    echo 'what ever you want with color ' . $colors[$status];
Le but ici étant de générer une couleur aléatoire unique par status, sans en limiter le nombre.

Bonne continuation.
Vincent Chapron
Formateur et Consultant PHP/JS @Openska
Twitter: @vincent_chapron

Eléphant du PHP | 385 Messages

03 nov. 2016, 10:18

Merci, j'ai réussi voilà mon algo si sa peut servir

Code : Tout sélectionner

function RandomCouleur(){ $r=dechex(rand(0,255)); $v=dechex(rand(0,255)); $b=dechex(rand(0,255)); return "#".$r.$v.$b; } $statut = 'SELECT DISTINCT * FROM INVENTAIRE'; $statut_array = array(''); foreach ($bdd->query($statut) as $statut_result) { $statut_array[$statut_result['statut']] = RandomCouleur(); } var_dump($statut_array); echo '<table>'; foreach ($bdd->query($statut) as $statut_result) { echo '<tr id="ligne_tableau">'; print '<td contenteditable="false" style="background-color:'.$statut_array[$statut_result['statut']].'" >'.$statut_result['statut'].'</td>'; echo '</tr>'; } echo '</table>';