Newsgroup: it.comp.www.php
Titolo: trasformare numeri in parole

Ciao,
ho il seguente problema:
ho una tabella persone su db mysql con campi del tipo nome, carisma,
carattere ed altri riguardanti qualità.
Poi ho un'altra tabella nella quale ho due campi valore e testo:
valore testo
  1 accettabile
  2 discreto
  3 buono
ecc. queste sono valide per carisma e carattere.
Siccome i valori di carattere e carisma nella tabella persone sono sotto
forma di numeri (1, 2, 3 ecc.) vorrei, una volta recuperati i dati di una
persona, trasformare i numeri in parole; in poche parole:
persona carisma
   tizio buono (e non 8).
come posso fare?
Michele
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 come posso fare?
Usa un array associativo:
$carattere = array (1 => 'accettabile', 2 => 'discreto', 3 = 'buono');
print ($carattere[$row['carattere']]);
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 print ($carattere[$row['carattere']]);
Buona idea. Intanto ti ringrazio per la risposta perņ questa operazione devo
farla per diverse variabili, carattere, carisma ed altre e per un numero X
di persone. Nelle mie intenzioni volevo creare una funzione che facesse
tutto questo ma mi sfugge qualcosa. Praticamente quello che non "individuo"
č come poter fare la stessa cosa sia per carattere che per carisma che per
le altre dal momento che ogni volta cambia il nome della variabile.


 che ogni volta cambia il nome della variabile.  Michele
Prima di tutto, le associazione valore => descrizione sono univoche?
Intendo che il carattere = 1 allora sara' "un carattere accettabile" e
che carisma = 1 allora sara' "un carisma accettabile"?
Se e' cosi' la cosa e' piuttosto semplice:
function translate_value ($id) {
	$values[1] = 'accettabile';
	$values[2] = 'discreto';
	$values[3] = 'buono';
      // etc
	if (isset ($values[$id])) {
		return $values[$id];
	}
	return false;
}
e poi usi translate_value ($row['carattere']) e translate_value
($row['carisma']).
Se invece ogni variabile ha descrizioni diverse devi definire una
funzione per ognuna (od almeno per ogni set di descrizioni diverse).


 che carisma = 1 allora sara' "un carisma accettabile"?
 
 Proprio cosě, grazie.


 ($row['carisma']).
Scusa, non capisco una cosa; ma $id che dato è? Io da una query avrò ad es.
$carattere = $riga['carattere']; //che avrà valore x
$carisma = $riga['carisma']; //che avrà valore y
Non capisco come gli passo $id, mi sfugge qualcosa.


 Non capisco come gli passo $id, mi sfugge qualcosa.
translate_value ($riga['carattere']);
translate_value ($riga['carisma']);


 come posso fare?
Devi fare un join (anzi due) fra le due tabelle. La prima hai detto che 
si chiama PERSONE, la seconda non so come si chiami e supporrò che il 
suo nome sia tblQualita:
mysql> select * from persone;
+----------+---------+-----------+
| nome     | carisma | carattere |
+----------+---------+-----------+
| Pippo    |       1 |         3 |
| Pluto    |       2 |         1 |
| Paperino |       3 |         3 |
| Minnie   |       2 |         1 |
+----------+---------+-----------+
4 rows in set (0.01 sec)
mysql> select * from tblQualita;
+--------+-------------+
| valore | testo       |
+--------+-------------+
|      1 | Accettabile |
|      2 | Discreto    |
|      3 | Buono       |
+--------+-------------+
3 rows in set (0.00 sec)
SELECT Nome, sub1.testo AS Carisma, sub2.testo AS Carattere
FROM
( Persone INNER JOIN tblQualita AS sub1
   on Persone.carisma = sub1.valore
) INNER JOIN tblQualita AS sub2
ON Persone.carattere = sub2.valore
+----------+-------------+-------------+
| Nome     | Carisma     | Carattere   |
+----------+-------------+-------------+
| Pluto    | Discreto    | Accettabile |
| Minnie   | Discreto    | Accettabile |
| Pippo    | Accettabile | Buono       |
| Paperino | Buono       | Buono       |
+----------+-------------+-------------+
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa.