Newsgroup: it.comp.www.php
Titolo: min() e max()

salve ho un piccolo problema:
se leggo dentro un array di nome ultimi10 contenente 10 valori numerici da 1 
ad 11 ad esempio
con
massimo=max($ultimi10) ottengo 11
minimo=min($ultimi10) non ottengo nulla non è definito
questo mi succede solo con gli array, se faccio min(1,2,3) non ho problemi 
ottengo 1
il bello è che nello stesso script se a min($ultimi10) sostituisco 
max($ultimi10)
il tutto viene definito....
strano, strano, strano.........!!!!!!!!!!!
grazie in anticipo per ogni eventuale risposta........ 


scusa la domanda banale, ma hai scritto esattamente:
massimo=max($ultimi10);
minimo=min($ultimi10);
oppure :
$massimo=max($ultimi10);
$minimo=min($ultimi10);
ripeto può essere una domanda banale ma legittima (talvolta mi capita
di commettere questi errori). :)
Ciao
Diego

 grazie in anticipo per ogni eventuale risposta........
prova a stampare il contenuto dell'array per vedere cosa contiene di 
preciso..
se non riesci a trovare il problema posta la porzione di codice 
"completa" e la versione PHP..
-- 
www.iuz-lab.info

massimo=max($ultimi10);
minimo=min($ultimi10);
oppure :
$massimo=max($ultimi10);
$minimo=min($ultimi10);
certo ho scritto $massimo e $minimo con i segni di variabile scusate ma 
nella fretta li ho omessi....
appena posso posto il codice

allora, ho un script che ogni 10 minuti controlla la temperatura dell'HD con 
hddtemp
e scrive il risultato in un file di log...
se rileva determinate temperature si comporta di conseguenza....
adesso con php leggo questi dati e creo un grafico (2 in realtà, uno script 
fa lo stesso per la memoria in uso)
lo script seguente crea un grafico che poi viene inserito in questa pagina 
speciale di manutenzione (casareccia) del server,
in quanto uso anche webmin e alcuni script agi per gestire il pc via 
telefono con asterisk(ma questa è un'altra storia)
il file che viene processato contiene dei dati sulle temperature e orari in 
cui queste sono state ottenute
per esempio ho un array tipico contenete (orario 18,orario 
18,18,18,18,19,19,19,19,19)
insomma di questo tipo con orario come chiave e gradi come valore, se non 
ricordo male, insomma bi-dimensionale....
<?
$var=fopen("./temp.log","r");
$leggi=fread($var,filesize("temp.log"));
$sss=nl2br($leggi);
fclose($var);
$valorilog=explode("<br />", $sss);
$lung=count($valorilog);
$ultimi10= array();
for($i=$lung -11; $i<$lung; $i++)
{
$ultimi10[substr($valorilog[$i], 0, 6)] = substr($valorilog[$i], 7, 2);
}
//Grafico a barre verticali
/*$minimo= 10;
momentaneamente ho risolto impostando un valore fisso
non curatevi di questa variabile*/
$minimo= min($ultimi10);
/* ho inserito questo codice ma dando un echo non ottengo nulla,
se invece scrivo $minimo= max($ultimi10); ottengo il valore corretto ad 
esempio 19 gradi */
include("../phplib/phpgraphlib.php");
//Impostiamo la dimensione della griglia del grafico (Larghezza, Altezza)
$graph=new PHPGraphLib(500,400);
//Inseriamo i dati relativi alle colonne del grafico, i valori che voliamo 
visualizzare
//Aggiungo i valori di cui sopra
$graph->addData($ultimi10);
//Imposto il titolo
$graph->setTitle("HD ultime 10 Temperature");
$graph->setBars(false);
$graph->setLine(true);
$graph->setDataPoints(true);
$graph->setDataPointColor("maroon");
$graph->setDataValues(true);
$graph->setDataValueColor("maroon");
$graph->setGoalLine(35);
$graph->setGoalLineColor("red");
$graph->setupYAxis(0, "blue");
$graph->setupXAxis(0, "blue");
$graph->setRange(45,$minimo);
$graph->setXValuesHorizontal(true);
$graph->setTextColor("navy");
//Creo il grafico
$graph->createGraph();
?>
appena ho tempo vi posto la versine esatta in uso ma a grandi linee uso la 
versine 5 fornita con debian etch
da reposity apt
grazie ancora.... 

php -v
PHP 5.2.0-8+etch13 (cli) (built: Oct  2 2008 08:26:18)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies



scusa ancora il disturbo.. ma potresti postare anche uno stralcio del 
file temp.log ..
-- 
www.iuz-lab.info

 file temp.log ..
ecco, non disturbi affatto grazie infinite per l'aiuto,
il file č tutto uguale orario, temperatura ecco le ultime righe(devo fare 
uno script per ripulirlo ogni tanto diventa troppo grande.....)
04:50,18
05:00,18
05:10,18
05:20,18
05:30,18
05:40,18
05:50,18
06:00,18
06:10,18
06:20,18
06:30,19
06:40,18
06:50,18
07:00,18
07:10,18
07:20,18
07:30,18
07:40,18
07:50,18
08:00,18
08:10,18
08:20,18
08:30,18
08:40,18
08:50,18
09:00,18
09:10,19
09:20,18
09:30,18
09:40,18
09:50,18
10:00,18
10:10,18
10:20,18
10:30,18
10:40,18
10:50,18
11:00,18
11:10,18
11:20,18
11:30,18
11:40,18
11:50,18
12:00,18
12:10,18
12:20,18
per visionare la pagina vai su 
http://spasi.dlinkddns.com
 e al 
logininserisci prova prova (un secondo che lo aggiungo al database)per farti 
un'idea.... 

 esempio 19 gradi */
se temp.log è fatto in questo modo:
04:00,18\n
04:10,18\n
[cut...]
05:20,18\n
05:30,18\n
05:40,18\n
05:50,18\n
06:00,18\n
l'ultimo elemento dell'array non sarà un numero, quindi min($ultimi10) 
non ti restituirà quello che vuoi...
per una prova veloce prova a mettere
$minimo = min(array_slice($ultimi10, 0, -1));

 farti un'idea....
sbagli gli indici di substr..
non testato..
<?php
include("../phplib/phpgraphlib.php");
$valorilog = file('./temp.log');
$ultimi10 = array_map('rtrim', array_slice($valorilog, -10));
$risultato = array();
foreach ($ultimi10 as $linea) {
  list($chiave, $valore) = split(',', $linea);
  $risultato[$chiave] = $valore;
}
$minimo = min($risultato);
$graph = new PHPGraphLib(500,400);
$graph->addData($ultimi10);
$graph->setTitle("HD ultime 10 Temperature");
$graph->setBars(false);
$graph->setLine(true);
$graph->setDataPoints(true);
$graph->setDataPointColor("maroon");
$graph->setDataValues(true);
$graph->setDataValueColor("maroon");
$graph->setGoalLine(35);
$graph->setGoalLineColor("red");
$graph->setupYAxis(0, "blue");
$graph->setupXAxis(0, "blue");
$graph->setRange(45, $minimo);
$graph->setXValuesHorizontal(true);
$graph->setTextColor("navy");
$graph->createGraph();
?>
-- 
www.iuz-lab.info

 $minimo = min(array_slice($ultimi10, 0, -1));
infatti funziona perfettamente!!!!!!!!
grazie ancora per l'interessamento..... 

PS: adesso per sicurezza disabilito
l'utente prova dato che ho risolto...
grazie 

 là....
perchè quel codice è euqivalente a questo:
$var=fopen("./temp.log","r");
$leggi=fread($var,filesize("temp.log")); $sss=explode("\n",$leggi);
fclose($var);
ma con un passaggio (inutile) in piu'

 l'interessamento.....
funziona, ma era soltanto per una prova... correggi lo script per 
renderlo più leggibile...
dai uno sguardo allo script di iuz e cerca di capire cosa fanno le 
funzioni che ha utilizzato... ci sono ottimi suggerimenti
come ultima cosa... utilizza nel miglior modo possibile i nomi delle 
variabili, avere un array $ultimi10 che in realtà contiene 11 valori può 
portarti a problemi non previsti...