Page 1 sur 1

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

Posté : 02 nov. 2016, 17:02
par kevin254kl
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?

Re: Couleur aléatoire dans un tableau identique pour une même chaine

Posté : 02 nov. 2016, 17:20
par lajuju21
essaye avec un switch(){
case :
break;
}

Re: Couleur aléatoire dans un tableau identique pour une même chaine

Posté : 02 nov. 2016, 17:31
par lajuju21
$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

Re: Couleur aléatoire dans un tableau identique pour une même chaine

Posté : 02 nov. 2016, 21:40
par kevin254kl
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.

Re: Couleur aléatoire dans un tableau identique pour une même chaine

Posté : 02 nov. 2016, 22:14
par Naroth
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

Re: Couleur aléatoire dans un tableau identique pour une même chaine

Posté : 02 nov. 2016, 22:46
par vincent.c
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.

Re: Couleur aléatoire dans un tableau identique pour une même chaine

Posté : 03 nov. 2016, 10:18
par kevin254kl
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>';