Funzione IF in un array

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve,

rieccomi con un altro quesito

in pratica con select estrapolo una colonna dal database quindi mi risulta una variabile $variabile contenete tutta la lista estrapolata ora intabello il risultato con
PHP:
echo "<table><tr><td>$variabile</td></tr></table>"

or auna curiosità poniamo il caso che la $variabile contenga la seguente lista

Giovanni
Marco
Paolo
Francesco
Giuseppe

Se io ora volessi fare in modo che verificata una condizione, esempio i nomi che iniziano con "G" mi colori le parole che iniziano con G tramite un if la cosa sarebbe possibile senzaz dividere l'array?

spero di essermi spiegato bene
 
ciao
$variabile è un array?
perche se si quello che hai scritto
echo "<table><tr><td>$variabile</td></tr></table>"

da come risultato a monitor

Array

e non la lista
 
ciao
$variabile è un array?
perche se si quello che hai scritto
echo "<table><tr><td>$variabile</td></tr></table>"

da come risultato a monitor

Array

e non la lista
babbè borgo se dico che è n'array non so scemo :D era pe rnons crivere il codice

PHP:
    $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );

    /* Stampa dei risultati in HTML */
    echo "<table border=\"1\">";
		
    while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
        

	
			
        foreach ($linea as $valore_colonna) {
		echo "<tr><td width=\"50\" align=\"right\"><b><font face=\"Tahoma\" size=\"2\" color=\"GREEN\">$valore_colonna</td>\n";


ora questo è un arrai ma rimane lo stesso problema di cui sopra
 
ciao
prova una cosa del genere

PHP:
<?php
function colore($car){
	switch(£car){
		case "A":
			$col="FFFFFF";
		break;
		case "B":
			$col="FFFF00";
		break;
		//ecc.......
		default:
			$col="FFFFFF";
		break;
	}
	return $col;
}//fine function



$risultato = mysql_query($query) or die("Query fallita: " . mysql_error() ); 
/* Stampa dei risultati in HTML */ 
echo "<table border=\"1\">"; 
 while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC)) { 
 	foreach ($linea as $valore_colonna) {
		$primo_car=substr($valore_colonna, 1);// legge il primo carattere
		//essendo alquanto lungo ti conviene fare una function o un file esterno
		$colore=colore($primo_car);
		echo "<tr><td width=\"50\" align=\"right\"><b><font face=\"Tahoma\" size=\"2\" color=\"#".$colore."\">$valore_colonna</td>\n";
		//ho messo color=\"#".$colore.....
		//perche dalle prove che ho fatto mettere come return direttamente (es.) #FFFFFF mi da degli errori
		//se vuoi vedere come funziona vai su cat-web.eu -> colori (li coloro le celle non i caratteri, ma è lo stesso)
		
	}
}
?>
 
Usa questa, che, ovviamente, funziona meglio di quella di borgo :D
Tra l'altro quella ha un errore di sintassi e poi substr('ciao', 1) restituisce iao, non c. A questa passa direttamente il nome della persona, saltando il passaggio della prima lettera. Aggiungi gli altri case sopra a default:
PHP:
<?php
function color($name)
{
	$first = substr($name, 0, 1);
	$first = strtoupper($first);
	
	switch($first)
	{
		case 'A':
			$color = 'FF0000';
			break;
		case 'B':
			$color = '00FF00';
			break;
		case 'C':
			$color = '0000FF';
			break;
		default:
			$color = 'FFFFFF';
	}
	
	return $color;
}
?>
 
miracolo, per una volta alex ha ragione, mi ero dimenticato uno zero:crying:
per il resto visto che i miracoli sono avvolti da mistero, non capisco perche la sua sia meglio, anche perchè
$first = strtoupper($first);
dovrebbe essere inutile se il l'insert su db è ben strutturato
per altro si potrebbe sostituire alle due funzioni
$first = $name[0];
 
Concordo con l'ultima che hai detto borgo, ma non con la prima, se non con il verbo dovrebbe.
Dato che non puoi dare per scontato che sia così, è buona pratica fare come dice Alessandro, semmai il problema è che non è elegante scrivere per 26 volte, cioè per ogni lettera dell'alfabeto un costrutto case, dai è una palla :D
Conviene automatizzarsi :cool: così ottieni subito il carattere e il suo uppercase:
PHP:
function capolettera($stringa) {
  //  Controllo che non sia già in maiuscolo se no è inutile.
  if (ord($stringa[0]) > 90) {
    $char = chr(ord($stringa[0]-32));  // Ora è in maiuscolo.
  }
return $char;
}
Così attraverso la tabella ASCII ottieni subito il carattere in uppercase, resta il problema del colore.
Considerando che esso si ottiene con una tripletta di valori che vanno da 0 a 255 è facile ottenerlo in modo casuale chiedendo per tre volte un numero random che va appunto da 0 a 255 e poi accoppiando le triplette in una stringa.
PHP:
$r = rand(0, 255);
$g = rand(0, 255);
$b = rand(0, 255);
$rgb = "#$r$g$b";
A questo punto potremmo accoppiare l'RGB alla funzione di cui sopra e farsi dare direttamente la lettera in maiuscolo con il colore associato.
PHP:
function capolettera($stringa) {
  //  Controllo che non sia già in maiuscolo se no è inutile.
  if (ord($stringa[0]) > 90) {
    $char = chr(ord($stringa[0]-32));  //  Ora è in maiuscolo.
  } else {
    $char = $stringa[0];  //  E' già in maiuscolo.
  }
  $r = rand(0, 255);
  $g = rand(0, 255);
  $b = rand(0, 255);
  $rgb = "#$r$g$b";
  //  Scrive il codice xhtml per il colore e la lettera
  $stringa = "<td style=\"width:50px; text-align:left; font: bold Tahoma, Sans-Serif; color: $rgb;\">$char".substr($stringa,1)."</td>\n";

return $stringa;
}
Alla fine scopri che nonostante la sboronata non ti serve a granché se consideri che comunque il codice colore viene dato in random, il che non ti da la possibilità di controllarlo, potrebbe capitare che esso sia uguale allo sfondo, ma ciò è verificabile a posteriori e riprovare a generarlo, potrebbe essere simile allo sfondo dando alle lettere un colore sbiadito, e questo è difficile da controllarsi, potrebbe non essere di tuo gradimento.
Tutta la funzione scritta fino a qui non è verificata perché la mia religione mi impedisce di farlo alle 7 e 40 di domenica mattina :D ma l'idea c'è va solo sviluppata.
 
Alla fine alle 7.46 scopri che oltre ad aver sboronato ti sei scritto una funzione inutile, dato che l'aver estratto in quel modo la prima lettera in maiuscolo non ti serve ad un piffero se non la devi mettere in una struttura di controllo, e quindi ti accorgi che tutta la struttura si riduce alla ricerca del colore e quindi....
PHP:
function capolettera($stringa) {
  $r = rand(0, 255);
  $g = rand(0, 255);
  $b = rand(0, 255);
  $rgb = "#$r$g$b";
  //  Scrive il codice xhtml per il colore e la lettera
  $stringa = "<td style=\"width:50px; text-align:left; font: bold Tahoma, Sans-Serif; color: $rgb;\">".ucfirst($stringa)."</td>\n";

return $stringa;
}
maledetta insonnia :dormo:
 
Piccola correzione: il primo carattere si ottiene con $var{0}, non $var[0], però io preferisco sempre usare substr. E ho messo un case per ogni lettera perché pensavo che i colori gli servissero sempre quelli, sennò che senso ha colorare a caso i nomi? :D
Altra correzione: voi avete mai visto un esadecimale del tipo #255255255? Io no! Casomai c'è #FFFFFF, quindi la funzione di marco è più complicata da strutturare di quello che si pensi. Per evitare di rovinarsi il cervello basta fare così:
PHP:
$rgb = "rgb({$r}, {$g}, {$b})";
E poi il tuo modo per ottenere la lettera maiuscola mi sembra molto più complicato del mio. Considerando che, all'inizio, entrambi non ci siamo accorti che esisteva la funzione ucfirst :D
 
Ultima modifica:
mi scuso se non ho risposto prima ma sto script mi sta facendo letteralmente impazzire :crying:

mamma che casino pensavo fosse più semplice
forse però questa ulteriore spiegazione può chiarire meglio la cosa perchè il colore dovrebbe darlo in automatico

in pratica su una tabella del databse ho diciamo 20 nomi se io aggiungo un campo colore dove

PHP:
Nome | Colore
Pippo | SI
Pluto | NO
Paperino |SI

quando vado ad estrapolare la lista (come già detto su)vorrei che sulla riga corrispondente se trova SI gli dia il colore rosso
indi Pippo e Paperino
questo forse complica un pò le cose :dipser:
 
In realtà le rende tremendamente più semplici. Fai così:
PHP:
<?php
$risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );

/* Stampa dei risultati in HTML */
echo "<table border=\"1\">";

while($linea = mysql_fetch_assoc($risultato))
{
	$row = '<tr>';
	if($linea['colore'] == 'SI')
		$row = '<tr color="#FF0000">';
	
	echo $row;
	
	foreach ($linea as $valore_colonna)
		echo "<td width=\"50\" align=\"right\"><b><font face=\"Tahoma\" size=\"2\">{$valore_colonna}</td>\n";
	
	echo '</tr>';
}
?>
 
ho inseirto queste righe proprio tra while e foreach
PHP:
    $row = '<tr>';
    if($linea['colore'] == 'SI')
        $row = '<tr color="#FF0000">';
    
    echo $row;

ma non succede niente

pippo non diventa rosso :crying:

cmq ale forse ti ha tratto in inganno la variaible $linea l'ho chiamata $linea ma in realtà è il risultato di una colonna

posto il codice
PHP:
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");

    /* Esecuzione di una query SQL */
    $query = "SELECT Nome FROM $tabella WHERE Societa='$thename' ORDER BY Nome";
    $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );

    /* Stampa dei risultati in HTML */
    echo "<table border=\"1\">\n";
	echo "<tr><td width=\"150\"><b><font face=\"Tahoma\" size=\"2\" color=\"BLUE\">Nome</td></tr>";

 
while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
   echo "\t<tr>\n";

qui ho inserito il codice che ho quotato sopra e poi continua

PHP:
        foreach ($linea as $valore_colonna) {
            echo "\t\t<td width=\"150\"><b><font face=\"Tahoma\" size=\"2\" color=\"GREEN\">$valore_colonna</td>\n";
		        }
        echo "\t</tr>\n";
    }
								echo "<tr><td width=\"150\" align=\"center\"><b><font face=\"Tahoma\" size=\"2\" color=\"RED\">Totale </td>";

    print "</table>\n";

    /* Liberazione delle risorse del risultato */
    mysql_free_result($risultato);


    /* Chiusura della connessione */
    mysql_close($connessione);
 
Ultima modifica:
ciao
per alex
ottiene con $var{0}, non $var[0],

vai a vederti questo "stranissimo" link esxample #3
http://www.php.net/manual/en/function.substr.php

per il resto, non capisco perchè si debba incasinare il tutto (dal random a mettere un casmpo in più) anche se deve scriversi ina vunzione con tutti i caratteri (da A a Z) n qusta modo uno può decidere il colore che vuole come richiesto nel primo post.
per render il primo carattere maiscolo non serve fare tutta la pappardella, ma basta la funzione ucfirst($stringa), tra l'altro cme detto non dovrebbe servire perche (trattandosi di nomi e/ cognomi) andrebbe utilizzata nell'insert in tal modo tutti i nomi/cognomi sarebbero salvati nel modo giusto.
 
Disgust.gif
 
Piccola correzione: il primo carattere si ottiene con $var{0}, non $var[0], però io preferisco sempre usare substr. E ho messo un case per ogni lettera perché pensavo che i colori gli servissero sempre quelli, sennò che senso ha colorare a caso i nomi? :D
Si possono usare tutti e due i sistemi, come riportato dal manuale online del PHP
Note: Strings may also be accessed using braces, as in $str{42}, for the same purpose. However, this syntax is deprecated as of PHP 5.3.0. Use square brackets instead, such as $str[42].
Anzi da quella frase si comprende come dalla versione 5.3 sarà disponibile solo la versione con le quadre [].
http://www.php.net/manual/en/language.types.string.php
Altra correzione: voi avete mai visto un esadecimale del tipo #255255255? Io no! Casomai c'è #FFFFFF, quindi la funzione di marco è più complicata da strutturare di quello che si pensi. Per evitare di rovinarsi il cervello basta fare così:
Il fatto che tu non l'abbia visto non significa che non si possa fare ;)
In effetti era troppo presto per impegnare tutti e due i neuroni del mio cervello, però tu dovresti sapere che la notazione decimale è perfettamente compatibile, solo che con i CSS andava specificato, questo sì.
Codice:
"color: rgb($r, $g, $b);"
PHP:
$rgb = "rgb({$r}, {$g}, {$b})";
O come hai fatto tu che può essere considerata più giusta se i valori vanno trasformati in una stringa.
E poi il tuo modo per ottenere la lettera maiuscola mi sembra molto più complicato del mio. Considerando che, all'inizio, entrambi non ci siamo accorti che esisteva la funzione ucfirst :D
Se tu stessi più attento ti saresti accorto che lo scrivo proprio nell'ultimo post.
ucfirst(), capitalizza la parola ma non estrae il primo carattere, ovvero ti rende un marco come un Marco, ma non lavori su M ma su tutta la stringa.
Ma il sistema che avevo usato io usava molte meno risorse macchina dato che si basa su una sottrazione, è un sistema che si usa correntemente in linguaggi come C e Pascal e francamente lo preferisco per operare su una sola lettera.
 
ciao
per alex


vai a vederti questo "stranissimo" link esxample #3
http://www.php.net/manual/en/function.substr.php

per il resto, non capisco perchè si debba incasinare il tutto (dal random a mettere un casmpo in più) anche se deve scriversi ina vunzione con tutti i caratteri (da A a Z) n qusta modo uno può decidere il colore che vuole come richiesto nel primo post.
per render il primo carattere maiscolo non serve fare tutta la pappardella, ma basta la funzione ucfirst($stringa), tra l'altro cme detto non dovrebbe servire perche (trattandosi di nomi e/ cognomi) andrebbe utilizzata nell'insert in tal modo tutti i nomi/cognomi sarebbero salvati nel modo giusto.
Pure Te!
La pappardella l'avevo iniziata a fare solo per estrarre il primo carattere, avevo capito che voleva colorare solo il primo carattere, ragazzi seguite il ragionamento, non a caso ho messo tre post di tutta la faccenda.
Alla fine avendo capito che il colore andava su tutto il nome l'ho eliminata, la pappardella, ed ho usato l'ucfirst.
Altra considerazione, il colore dallo alla cella, non alla riga.
PHP:
$row = '<td style="color=#FF0000">';
 
Caspita, non sapevo che si potesse fare anche con le parentesi quadre. Sembra strano, eppure quella schiap, ehm... quel saggio di borgo mi ha corretto :D
Comunque prova ad usare direttamente il codice che ho postato io, sostituendolo completamente al tuo. Presenta alcune migliorie.
 
Ciao
Visto che si parla di funzioni per ricavare il colore e che generalmente i codici dei colori in html sono esadecimali volevo suggerire al posto di

$rgb = "rgb({$r}, {$g}, {$b})";

posto

$r = un numero decimale da 0 a 255
$g = un numero decimale da 0 a 255
$b = un numero decimale da 0 a 255

Si puo ottenere il codice colore in esadecimale con

$colore =”#”.base_convert($r, 10, 16). base_convert($g, 10, 16). base_convert($b, 10, 16);


p.s.

ehm... quel saggio di borgo mi ha corretto

aha!!! se i bambini tacessero quando parlano gli adulti
 

Discussioni simili