Funzione IF in un array

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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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)
		
	}
}
?>
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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;
}
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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];
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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.
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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:
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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:

Monital

Utente Attivo
15 Apr 2009
778
2
18
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:
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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>';
}
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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.
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
Disgust.gif
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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.
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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">';
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
A utilizzare array di una funzione in un'altra jQuery 1
asevenx Funzione strpos con l'utilizzo di array PHP 4
M funzione mysql fetch array PHP 3
L Funzione non restituisce completamente un array PHP 2
E ordinamento array multidimensionale per un valore ottenuto tramite una funzione PHP 1
C Ordinare alfabeticamente un array e ordinare un secondo array in funzione del primo. Javascript 12
nim funzione array(); e chiarimenti foreach PHP 6
M Chiamata di una funzione che contenga un array PHP 13
T passare una array ad una funzione PHP 2
I array php inviarli a funzione javascript PHP 1
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
R Variabile non risconosciuta dentro una funzione PHP 1
P Implementazione funzione FileReader Javascript 0
P Funzione copia multipla. Javascript 2
P Funzione jQuery Ajax invio file a php jQuery 1
A Funzione read URL PHP 6
F Funzione Glob - ricerca file contenente una parola PHP 1
A Mail con funzione mail() riconosciute come spam PHP 9
M Utilizzare la funzione mysql_num_rows() in PHP 5 PHP 3
A funzione iconv () non mi funziona PHP 4
D Come usare funzione php PHP 6
Y verificare condizione dopo esecuzione della funzione Programmazione 0
IClaude Funzione Javascript Javascript 8
A Funzione share come modificarla Social Media Marketing 0
L funzione onclik con seno e coseno non va Javascript 3
L funzione onclick non va Javascript 26
G modifica corretta funzione da eregi() a preg_match() PHP 3
Shyson Modificare funzione php PHP 15
L pdo (stampare un valore con ritorno a funzione) PHP 0
elpirata Funzione conversione da minuti in ore Javascript 0
@ [MS Access] Funzione Iif..is null... Database 0
F Funzione deprecata in PHP7 PHP 1
G [MS Access] Funzione ARROTONDA non definita nell'espressione MS Access 1
max1974 [Javascript] Funzione Errata procedura Javascript 2
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
Domenico_Falco1 Associare una stessa funzione get a due eventi a.click con classi differenti Ajax 6
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
L Problema funzione mail() PHP PHP 3
elpirata [Javascript] Lo script alle volte funzione altre volte no Javascript 0
V [Visual Basic] Richiamare funzione su modulo per restituire list Visual Basic 0
R [Photoshop] funzione colore automatico Photoshop 0
maxnegri [PHP]Funzione di calcolo prezzo di una camera in un range di date PHP 62
L [PHP] problema count messo in una funzione. PHP 1
Monital funzione php si ripete due volte PHP 6
GiErre [PHP] [HTML] Disabilitare un link in funzione della piattaforma PHP 7
Monital Funzione php e campo database come variabile PHP 6
M Recuperare ID e usarlo in funzione jQuery 2
M PHP - Funzione non e scrive il risultato PHP 3
R [Javascript] Rendere una funzione sempre visibile Javascript 2
M funzione mysql che ritorna i microsecondi a partire dal 1-1-1970 MySQL 3

Discussioni simili