Autor Zpráva
kimmy
Profil *
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>&nbsp;</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
kimmy
Nejmíň pracné mi přijde dát hodnoty do pole a ty porovnat :)
Nápověda: array_intersect, array_diff, apod.
kimmy
Profil *
Aesir
Nemohl by si, prosím, uvést příklad?
Aesir
Profil
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 *
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
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
kimmy - Aesir ti poradil dobre:

foreach($rows as $polozka){ //pres vsechny polozky
  if (1 === count(array_unique($polozka))) {
    // vsechny barvy jsou stejne
  }
...
kimmy
Profil *
Alphard
tiso
Aesir
Aha, to mě nenapadlo, už to funguje. Mockrát všem děkuju.

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:

0