Autor Zpráva
tazzys
Profil
Dobrý den, mám tabulku a potřebuju aby v každém sloupci bylo barevně označeno nejvyšší číslo.

mám toto:

<?php

$nacitane_vsetky_hraci = mysql_query("SELECT * FROM  prestizclenu ORDER BY id asc");
$i = 0;
$a = 1;
while($vsetky_hraci = mysql_fetch_array($nacitane_vsetky_hraci)){
$nacitane_hraci[$i] = $vsetky_hraci;
$i++;
}

for($y=0;$y<$i;$y++){


if ($nacitane_hraci[$y]['p5']>="1000"){

$preb5='<font color="Green">'.$nacitane_hraci[$y]['p5'].'</font>';
}

elseif ($nacitane_hraci[$y]['p5']<="999"){

$preb5='<font color="red">'.$nacitane_hraci[$y]['p5'].'</font>';
}


if ($nacitane_hraci[$y]['p4']>="1000"){

$preb4='<font color="Green">'.$nacitane_hraci[$y]['p4'].'</font>';
}

elseif ($nacitane_hraci[$y]['p4']<="999"){

$preb4='<font color="red">'.$nacitane_hraci[$y]['p4'].'</font>';
}



if ($nacitane_hraci[$y]['p3']>="1000"){

$preb3='<font color="Green">'.$nacitane_hraci[$y]['p3'].'</font>';
}

elseif ($nacitane_hraci[$y]['p3']<="999"){

$preb3='<font color="red">'.$nacitane_hraci[$y]['p3'].'</font>';
}


              echo '
              
 <tr nowrap>
              
              <td><b>'.$a++.'</b></td><td nowrap>'.$nacitane_hraci[$y]['hrac'].'</td>
                    <td nowrap><b>'.$preb5.'</b></td><td nowrap>'.$nacitane_hraci[$y]['d5'].'</td>
                    <td nowrap><b>'.$preb4.'</b></td><td nowrap>'.$nacitane_hraci[$y]['d4'].'</td>
                    <td nowrap><b>'.$preb3.'</b></td><td nowrap>'.$nacitane_hraci[$y]['d3'].'</td>
  </tr> ';

}    
?>

Asi to bude hodnotou max ale nevim vůbec jak to aplikovat, poradíte ?
visionic
Profil *
Nedelej to v php, ale v css pres :nth-child(1)

.cisla {
color: black;
}
.cisla:nth-child(1) {
color: red;
}
Alphard
Profil
Přeskočte rovnou na [#5] Alphard, tady jsem si nevzpomněl na funkci array_column(). :-)

Nejdříve je třeba znát maximální hodnoty v jednotlivých sloupcích.
Šlo by použít mysql agregační funkci max, ale to by tam musel být druhý dotaz, takže to bych vynechal. Na straně php buď vytvořit dočasná pole, kde budou vždy hodnoty jednohlo sloupce a pak použit funkci max(), nebo ty maxima kontrolovat přímo v tom prvním cyklu.
Až budete znát maxima, je to jen jednoduchá podmínka.

$nacitane_vsetky_hraci = mysql_query("SELECT * FROM  prestizclenu ORDER BY id asc");
$i = 0;
$a = 1;
$maxima = ['p5' => -1];  # pokud ve sloupcích mohou být záporné hodnoty, musí být default menší
while($vsetky_hraci = mysql_fetch_array($nacitane_vsetky_hraci)) {
  $nacitane_hraci[$i] = $vsetky_hraci;
  $i++;
  if ($vsetky_hraci['p5'] > $maxima['p5']) {
    $maxima['p5'] = $vsetky_hraci['p5'];
  }
}

// ...

if ($nacitane_hraci[$y]['p5'] == $maxima['p5']) {
  // maximální řádek(y)
}
visionic
Profil *
Oooo pardon, nevsimnul jsem si, ze nevypisujes dle toho největšího čísla.


Co treba zajit prochazeni poli pomoci max($nacitane_hraci[$y]['p5']);
Alphard
Profil
Problém s funkcí max je v adresování sloupce v 2D poli. Zápis $nacitane_hraci[$y]['p5'] ukazuje na konkrétní prvek, tam nemá smysl hledat maximum, zápis $nacitane_hraci[$y] ukazuje na řádek, tam by hledání maxima smysl mít mohlo, nicméně to tazatel nechce.

Řešením je použít funkci array_column, která vrátí hodnoty požadovaného sloupce a na ty lze použít max. Pak se to zjednoduší na:

$maxima = ['p5' => max(array_column($nacitane_hraci, 'p5'))];

(Funkce array_column() je dostupná od PHP 5.5, náš zvýrazňovač ji neumí správně obarvit.)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: