| Autor | Zpráva | ||
|---|---|---|---|
| kimmy Profil * |
#1 · Zasláno: 29. 12. 2008, 10:27:06
Ahoj,
prosím neporadil by mi někdo, jak docílit u porovnávání produktů toho (jako například Zde), že pokud jsou v řádku všechny hodnoty stejné, pak je písmo šedé a pokud se v řádku nějaké hodnoty liší, tak je písmo černé? Mám takovou část tabulky, která mi ty hodnoty vypisuje, vzhledově je to podobné jako v odkazu výše, jen písmo mám pořád černé.. $i=0;
foreach($rows as $polozka){ //pres vsechny polozky
if ($i%2 == 0) {$style='style="background-color:#eee;"';} else {$style='';}
echo '<tr '.$style.'><th>'.$polozka.'</th>';
foreach($columns as $id){ //pres vsechny sloupce
if(isset($table[$polozka][$id])){ //mame hodnotu
echo '<td>'.$table[$polozka][$id].'</td>';
} else { //nemame hodnotu
echo '<td> </td>';
}
}
echo '</tr>';
$i++;
} A ještě dodám, co obsahují pole $table, $rows a $columns: while($row=mysql_fetch_assoc($query)){
if(!isset($table['produkt'][$row['id_produkt']])){
$table['produkt'][$row['id_produkt']]=$row['produkt'];
}
if(!empty($row['polozka'])){//pridame polozku:
$table[$row['polozka']][$row['id_produkt']]=$row['hodnota'];
}
}
$order=array();
foreach($table as $key => $val){
$order[$key]=count($val);
}
$rows=array_keys(array_reverse($order));
$columns=array_keys($table['produkt']);Nevěděl by, prosím, někdo, kam a jakou podmínku vepsat, aby to obarvilo písmo na šedé, pokud jsou hodnoty v řádku všechny stejné? Nebo dát defaultně písmo šedé a obarvit písmo černou, když se některé hodnoty liší - Podle toho, co je jednodušší.. Děkuju moc. |
||
| Aesir Profil |
#2 · Zasláno: 29. 12. 2008, 11:23:37
kimmy
Nejmíň pracné mi přijde dát hodnoty do pole a ty porovnat :) Nápověda: array_intersect, array_diff, apod. |
||
| kimmy Profil * |
#3 · Zasláno: 29. 12. 2008, 11:26:26
Aesir
Nemohl by si, prosím, uvést příklad? |
||
| Aesir Profil |
#4 · Zasláno: 29. 12. 2008, 12:22:29
kimmy:
Kompletně to rozepisovat nebudu, ale předpokládám, že na vstupu máte pole vypadající nějak takto:
$products = array(
'1' => array('Color' => 'Black', 'Width' => '188 cm'),
'2' => array('Color' => 'White', 'Width' => '188 cm'),
'3' => array('Color' => 'Black', 'Width' => '188 cm')
);
Potřebujete tedy jednotlivé vlastnosti rozházet do separátních polí, např. takto: $colors = array( '1' => 'Black', '2' => 'White', '3' => 'Black' ); Pak už můžete jednotlivé pole jednodušše porovnat pomocí nějaké callback funkce. Nebo mě napadá fce array_unique :))
if (1 == count(array_unique($colors))) {
// vsechny barvy jsou stejne
}
|
||
| kimmy Profil * |
#5 · Zasláno: 29. 12. 2008, 12:47:07
Aesir
Děkuji za reakci, ale to moje pole vypadá jinak - například takto: Array ( [produkt] => Array ( [20] => Maliny [21] => Mandarinky [24] => Nektarinky ) [img] => Array ( [20] => maliny-1200750316.jpg [21] => mandarinka-1200750371.jpg [24] => nektarinka-1200750462.jpg ) [Velikost] => Array ( [20] => Drobné jako borůvka [21] => Velké jako jablko [24] => Velké jako jablko ) [Chuť] => Array ( [21] => Sladké [24] => Sladké [20] => Sladké ) ) A teď bych potřebovala jen vytvořit nějakou podmínku, která by zjistila, zda jsou ty hodnoty v daném řádku stejné.. V tomto případě by se mělo zjistit, že: Sladké == Sladké == Sladké -> písmo obarvi šedě Drobné jako borůvka <> Velké jako jablko == Velké jako jablko -> písmo obarvi černě Šlo by to nějak, prosím? |
||
| Alphard Profil |
#6 · Zasláno: 29. 12. 2008, 12:55:12
„A teď bych potřebovala jen vytvořit nějakou podmínku, která by zjistila, zda jsou ty hodnoty v daném řádku stejné..“
viz Aesir if (1 == count(array_unique($colors))) {
// vsechny barvy jsou stejne
}
trochu to vysvětlím: duplicity se vyhodí, pokud bylo vše stejné, zůstane jen jeden prvek, pokud ne, více |
||
| tiso Profil |
#7 · Zasláno: 29. 12. 2008, 12:55:44
kimmy - Aesir ti poradil dobre:
foreach($rows as $polozka){ //pres vsechny polozky
if (1 === count(array_unique($polozka))) {
// vsechny barvy jsou stejne
}
... |
||
| kimmy Profil * |
#8 · Zasláno: 29. 12. 2008, 13:11:18
Alphard
tiso Aesir Aha, to mě nenapadlo, už to funguje. Mockrát všem děkuju. |
||
|
Časová prodleva: 17 let
|
|||
0