Newsgroup: it.comp.www.php
Titolo: Confrontarte due numeri - sono stanco, scusate :(

dati in ingresso: un intero ($int)
cosa devo fare:   devo decidere se sia meglio dividere l'intero per 3 o 
per quattro (quale divisione mi da il resto minore)
$bythree = $int/3;
$byfour  = $int/4;
$smaller = "più piccolo dei due sopra";
return $smaller;
qual'è il modo più breve per stabilire qual'è il più piccolo dei due?
mi basta che mi indichiate la strada, e poi vado a spulciare il manuale.
operatori logici?
grazie e scusate, a quest'ora sono sfinito :(

qual'è il modo più breve per stabilire qual'è il più piccolo dei due?
http://it.php.net/min
 ?
-- 
"Finche' ti morde un lupo, pazienza. 
 Quel che secca e' quando ti morde una pecora."

Rosario ha scritto:
 > 
http://it.php.net/min
 ?
azz, stqavo tornando per dire che ho trovato, ma mi hai preceduto. santo 
manuale comunque. Stavo giusto spulciando il mio php.chm quando mi sono 
imbattuto in max e min :D
Grazie e scusate per la domanda idioooooooooooota!

Scusa ma fare un if?
if ($bythree<$byfour)
    return $bythree;
else
    return $byfour;
Oppure, al massimo, l'operatore "?":
return $bythree<$byfour ? $bythree : $byfour;

Darkbyte [Home] ha scritto:
 > Scusa ma fare un if?
la stanchezza porta rincoglionimento :D
e a me quest'ultimo fa nascere ide strane. volevo una soluzione pulita, 
ma nulla...
alla fine ho risolto con qualcosa del genere...
function columns_no($numcats) {
	$min = 2;
	$max = 4;
	$by_min  = $numcats % $min;
	$by_max  = $numcats % $max;
	$by_who = min($by3, $by4);
 
	if($by_who == $by_min OR $max>$numcats) {
		$cols['number'] = $min;
		$cols['width'] = floor(100/$min)."%";
	} else {
		$cols['number'] = $max;
		$cols['width'] = floor(100/$max)."%";
	}
	return $cols;
}
i valori min e max (ora fissi) verranno letti poi da database.
 > Oppure, al massimo, l'operatore "?":
 >
 > return $bythree<$byfour ? $bythree : $byfour;
non li mastico molto questi, ma mi sa che mi devo affilare i denti :D
grazie di cuore a tutti.

 grazie di cuore a tutti.
se ho capito bene la funzione che hai scritto non funziona come vorresti..
potresti spiegare esattamente quello che dovrebbe fare..
sotto trovi una mia interpretazione..
(trova il valore con resto minore e restituisce l'array adeguato, se i resti
sono uguali viene assegnato il divisore minore)
function columns_no($numcats) {
 $min = 2;
 $max = 5;
 $res = (($numcats % $min) <= ($numcats % $max)) ? $min : $max;
 return array('number' => $res, 'width' => floor(100 / $res) . '%');
}
-- 
www.iuz-lab.info

iuz ha scritto:
 > se ho capito bene la funzione che hai scritto non funziona come 
vorresti..
 > potresti spiegare esattamente quello che dovrebbe fare..
probabilmente vista la stanchezza la mia capacità di espressione era 
ridotta ai minimi termini. Ciò premesso, vengo al dunque:
la funzione serve per determinare qual'è il numero di colonne "migliore" 
per una tabella, dal punto di vista del layout.
Alla funzione io passo il numero di elementi da visualizzare nella 
tabella, e la funzione si comporta così:
1) stabilisce se il numero di oggetti sia più vicino ad un multiplo del 
valore $min o del valore $max
2) quindi assume come numero di colonne rispettivamente o $min o $max
3) determina la lunghezza delle colonne come 100/$colonne
4) restituisce un array associatico contenente il numero di colonne e la 
loro larghezza
ok, ora sono stato più chiaro.
 > (trova il valore con resto minore e restituisce l'array adeguato, se 
i resti
 > sono uguali viene assegnato il divisore minore)
hem, qui $res è uno tra $min e $max? o è il resto della divisione?
e soprattutto, dove trovo qualcosa che mi spieghi bene il significato di 
? e : (se nel manuale cerco uno dei due, giustamente lui si incazza :()
 > function columns_no($numcats) {
 >  $min = 2;
 >  $max = 5;
 >  $res = (($numcats % $min) <= ($numcats % $max)) ? $min : $max;
 >  return array('number' => $res, 'width' => floor(100 / $res) . '%');
 > }
me la tengo per buona e fo delle prove :D

 }
quando sarà capace di scrivere roba così pulita? :(
Grazie ancora, ciao

 Grazie ancora, ciao
-- 
www.iuz-lab.info

 ? e : (se nel manuale cerco uno dei due, giustamente lui si incazza :()
[..]
e' un operatore ternario..
http://it.php.net/manual/en/language.operators.comparison.php
-- 
www.iuz-lab.info

iuz ha scritto:
 > e' un operatore ternario..
 > 
http://it.php.net/manual/en/language.operators.comparison.php
capito a cosa serve. a questo puntof o una domanda diciamo così "stilistica"
a parte la pulizia e la brevità del codice (anche se forse un pò a 
scapito della leggibilità e immediatezza di comprensione) esistono altri 
vantaggi, ad esempio in termini prestazionali, nell'utilizzare 
l'operatore ?: anzichè i classici if - else ?
Mi rendo conto che in questo caso la differenza prestazionale conta 
nulla. Ma in un contesto ben più ampio, dove si abbia la necessita di 
eseguire centinaia, o migliaia di operazioni, la cosa assume una 
rlevanza decisamente più marcata.
Ciao

Movie Maniac® wrote:

no non ci sono motivi di prestazione, ma in questi casi la differenza per
quanto la leggibilita' potrebbe essere discussa..
io preferisco scrivere tutto su una riga se possibile e poi lasciare un
commento che descriva esattamente cio' quella parte di codice deve fare.
// Qui viene messo in $res [...] tra $min e $max
$res = (($numcats % $min == 0) OR (($numcats % $max) != 0 AND ($min -
($numcats % $min)) <= ($max - ($numcats % $max)))) ? $min : $max;
ma anche se lo avessi scritto con if-else..
if(($numcats % $min == 0) OR (($numcats % $max) != 0 AND ($min -
($numcats % $min)) <= ($max - ($numcats % $max)))){
  $res = $min;
} 
else {
  $res = $max;
}
oppure con un'po' di formattazione..
if($numcats % $min == 0 OR 
   ($numcats % $max != 0 AND 
    $min - ($numcats % $min) <= $max - ($numcats % $max)
  ))
{
  $res = $min;
} 
else 
{
  $res = $max;
}
forse (ma forse) la leggibilita' sara' aumentata ma hai utilizzato 6 righe
nel primo caso e 11 righe nel secondo..
ed IMHO preferisco che gli script siano piu' brevi possibili soprattutto in
progetti molto grandi.. il codice ()?: sara' anche difficile da leggere ma
se ben commentato non dovrebbe dare problemi di comprensione..
-- 
www.iuz-lab.info

Movie Maniac® wrote:

no non ci sono motivi di prestazione, ma in questi casi la differenza per
quanto riguarda la leggibilita' potrebbe essere discussa..


 valori corretti..
onestamente non credo di aver colto appieno.
ho fatto delle prove con 5 oggetti (numcats) da posizionare in tabella 
con colonne da un min di 2 a un max di 3
entrambe le due funzioni, mi hanno posizionato gli oggetti in 3 righe da 
due oggetti ciascuna, lasciando l'ultima riga con una cella vuota =>50% 
dello spazio vuoto
sarebbe stato meglio invece un posizionamento su due righe da 3, con una 
cella da 33% vuota (=>meno spazio vuoto)
forse quindi la condizione
AND ($min - ($numcats % $min)) <= ($max - ($numcats % $max)
della seconda funzione andrebbe sostituita con
AND ($min - ($numcats % $min)) < ($max - ($numcats % $max)
che ne dici?
NOTA: la direzione non si ritiene in alcun modo responsabile per le 
"stro***te" sopra scritte, in quanto la stessa è sottoposta a sevizie 
psicologiche da parte di assurde matrici di rotazione :( :D
Grazie mille per il supporto comunque