PHP/MySQL - Problema con generazione array

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Ciao a tutti,

mi trovo con un problema piuttosto stupido. Tramite query vado a richiamare dei record da mysql per poter generare un grafico binario (quindi con valori 0 o 1) passando un array composto in questo modo: $ora => $valore. Ho provato a scrivere il codice ma non mi funziona in nessun modo, quindi stò sicuramente cannando qualcosa di brutto nella generazione dell'array. Questo è il pastebin http://pastebin.com/e7PBcb9H. Qualche anima pia mi può indicare dove cavolo stò sbagliando? Grazie a tutti
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
non conosco il problema, ma così a naso non è che nel ciclo
for($j=1; $j<=$db2->nrows(); $j++){
valorizzi sempre la stessa variabile $data, prima come stringa poi come array e all'uscita ti ritrovi solo con i valori dell'array?
il valore $db2->read($i, "data") sparisce quindi a che ti serve leggerlo?
poi prova a scriverla così
PHP:
$data[$ora]=$stato;
se è quella
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
scusa per la precisione se era quello il problema, prima ho detto "prova a scrivere così", avrei dovuto dire "scrivi così" perchè facendo
PHP:
<?php
for($j=1; $j<=$db2->nrows(); $j++){
//....
$data = array("$ora" => $stato);    
}
//...
?>
all'uscita del for ti ritrovi un array composto da un solo elemento cioè dall'ultimo letto
es, leggendo 14 pieno, 15 mezzo pieno, 16 vuoto ti ritrovi solo
$data[16] => vuoto
 

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Ritorno sul post perchè sembrava fosse a posto, in realtà funziona solamente se ho un unico valore. Se ho più valori non mi genera l'array. Ho provato a modificare il codice così:

PHP:
for($j=1; $j<=$db2->nrows(); $j++)
                    {
                        $ora = $db2->read($i, "ora");
                        $stato = $db2->read($i, "stato");
                        $dati = array("$ora" => $stato);    
                        var_dump($dati);
                    }
ma il var_dump mi da sempre e solo un valore.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
usando $dati = array("$ora" => $stato); ti troverai sempre solo coll'ultimo dato
prova
PHP:
<?php
echo "<pre>";
$dati['13']="pieno";
$dati['14']="mezzo pieno";
$dati['17']="mezzo vuoto";
$dati['18']="vuoto";
var_dump($dati);
foreach($dati as $ora => $stato){
	$dati = array("$ora" => $stato);
}
var_dump($dati);
echo "</pre>";
?>
se ci pensi per annullare un array al posto dell'unset puoi usare
PHP:
$dati=array();
quindi ad ogni ciclo annulli il precedente e valorizzi col successivo
 

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
ciao
usando $dati = array("$ora" => $stato); ti troverai sempre solo coll'ultimo dato
prova
PHP:
<?php
echo "<pre>";
$dati['13']="pieno";
$dati['14']="mezzo pieno";
$dati['17']="mezzo vuoto";
$dati['18']="vuoto";
var_dump($dati);
foreach($dati as $ora => $stato){
	$dati = array("$ora" => $stato);
}
var_dump($dati);
echo "</pre>";
?>
se ci pensi per annullare un array al posto dell'unset puoi usare
PHP:
$dati=array();
quindi ad ogni ciclo annulli il precedente e valorizzi col successivo
Si, ma io voglio ottenere un array composto dai valori ora=>data estrapolati dalla tabella. Mi servono tutti quei valori, non solo l'ultimo. Come devo correggere quindi il codice per ottenere una struttura dati simile a questa?

PHP:
 $dati = array("9:00" => 1, "9:03" => 0, "11:01" => 1, "12:04" => 0, "19:42" => 1);
 
Ultima modifica:

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Allora, ho cambiato classe per la generazione dei grafici e ora ho scaricato phplot. Ora, la faccenda sembra praticamente uguale, in quanto il mio recordset va generato in questo modo

PHP:
$data = array(
array("9:00", 1),
array("11:00", 0),
array("11:39", 1)
);
ma comunque non riesco a generare dinamicamente la struttura. Questo è il mio PHP:

PHP:
$db = new myDB();
$db->connect();
    try
    {
        $Linea = ("select * from tblLine where Id = '1'");
        if($db->execute($Linea))
        {
            for($i=1; $i<=$db->nrows(); $i++)
            {
                $Nome = $db->read($i, "Nome");
                $IdLinea = $db->read($i, "Id");
                $db2 = new myDB();
                $db2->connect();
                
                    $GenerateGraph = ("select * from tblLogLine where Line = '".$IdLinea."'");
                    if($db2->execute($GenerateGraph))
                    {
                        for($j=1; $j<=$db2->nrows(); $j++)
                        {
                        $ora = $db2->read($i, "Ora");
                        $stato = $db2->read($i, "stato");
                       /*** MA QUI COSA SCRIVO PER GENERARE STO MALEDETTO ARRAY? ***/ 

                        }
                    }
                $db2->disconnect();
            }
        }
    } catch (Exception $ex) 
    {
        print $ex->getMessage();
    }
$db->disconnect();
Qualche anima pia mi può dire l'istruzione corretta prima che butti tutto fuori dalla finestra?
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
PHP:
for($j=1; $j<=$db2->nrows(); $j++)
                        {
                        $ora = $db2->read($i, "Ora");
                        $stato = $db2->read($i, "stato");
                       /*** MA QUI COSA SCRIVO PER GENERARE STO MALEDETTO ARRAY? ***/ 
                        $dati[$ora]=$stato;//se l'array deve chiamarsi dati
                        }
e se $ora e $stato sono giusti ottinieni l'array
$dati['10:00'] => 0
$dati['10:05'] => 0
$dati['10:10'] => 1
ecc.....
subito dopèo l'uscita dal for metti un var_dump($dati) così verifichi
 

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Niente di fatto. Faccio un riassunto completo: Devo generare dei grafici di tipo binario (quindi con valori 0 o 1). Il dataset da passare alla libreria è un array composto in questo modo:

PHP:
$value = array(
 array('9:00', 1), 
 array('9:05', 0),
 ....

);
questa è la tabella con il suo contenuto:

Codice:
CREATE TABLE IF NOT EXISTS `tblLogLine` (
  `Id` int(20) NOT NULL AUTO_INCREMENT,
  `Line` int(1) NOT NULL,
  `Data` date NOT NULL,
  `Ora` varchar(5) NOT NULL,
  `stato` int(1) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

--
-- Dump dei dati per la tabella `tblLogLine`
--

INSERT INTO `tblLogLine` (`Id`, `Line`, `Data`, `Ora`, `stato`) VALUES
(1, 1, '2015-10-21', '9:00', 1),
(2, 1, '2015-10-21', '9:10', 0),
(3, 1, '2015-10-21', '9:40', 1),
(4, 2, '2015-10-21', '16:12', 1),
(5, 2, '2015-10-21', '17:34', 0),
(6, 1, '2015-10-22', '17:21', 1),
(7, 1, '2015-10-22', '17:21', 0),
(8, 1, '2015-10-22', '18:50', 1),
(9, 1, '2015-10-22', '18:50', 0),
(10, 1, '2015-10-22', '19:01', 1),
(11, 1, '2015-10-22', '19:01', 0);
mentre questo è il codice PHP che ho scritto:

PHP:
<?php 
require 'db.php';
require 'phplot.php';
$db = new myDB();
$db->connect();
$value=array();
$DataGraph = ("SELECT * FROM tblLine WHERE Id = '1'");
        if($db->execute($DataGraph))
        {
            for($i=1; $i<=$db->nrows();$i++)
            {
                $Linea = $db->read($i, "Nome");
                $IdLinea = $db->read($i, "Id");
                $LogGraph = ("SELECT * FROM tblLogLine WHERE Line = '1'");
                $db2 = new myDB();
                $db2->connect();
                if($db2->execute($LogGraph))
                {
                    for($j=1; $j<=$db2->nrows(); $j++)
                    {
                    $ora = $db2->read($j, "Ora");
                    $stato = $db2->read($j, "stato");
                    $value[$j] = array("$ora", $stato);  
                    
                    }
                }
                var_dump($value);
                /*$value = array(array('9:00', 1), array('9:05', 0), 
                         array('21:00', 1), array('4:00', 0), array('4:00', 0));*/
                /*$plot = new PHPlot();
                $plot->SetDataValues($value);
                $plot->SetTitle('First Test Plot');
                $plot->SetPlotType('squared');
                $plot->SetLineWidths('2');
                $plot->SetDataColors('#ff0000');
                $plot->DrawGraph();
                $db2->disconnect();*/
            }
        }
$db->disconnect();
e questo è il risultato del var_dump($value):

Codice:
array(9) { [1]=> array(2) { [0]=> string(4) "9:00" [1]=> string(1) "1" } [2]=> array(2) { [0]=> string(4) "9:10" [1]=> string(1) "0" } [3]=> array(2) { [0]=> string(4) "9:40" [1]=> string(1) "1" } [4]=> array(2) { [0]=> string(5) "17:21" [1]=> string(1) "1" } [5]=> array(2) { [0]=> string(5) "17:21" [1]=> string(1) "0" } [6]=> array(2) { [0]=> string(5) "18:50" [1]=> string(1) "1" } [7]=> array(2) { [0]=> string(5) "18:50" [1]=> string(1) "0" } [8]=> array(2) { [0]=> string(5) "19:01" [1]=> string(1) "1" } [9]=> array(2) { [0]=> string(5) "19:01" [1]=> string(1) "0" } }
Dove stò sbagliando?
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.920
164
63
Lombardia
vedi se ti va bene così,
PHP:
$data=array(); // inizializzo l'array "esterna" prima del ciclo 

$data[]=array("9:00", 1); // riga da inserire con le dovute variabili al posto delle costanti
$data[]=array("11:00", 0);
$data[]=array("11:39", 1);
var_dump($data); echo '<br /> <br />';
risultato
array(3) { [0]=> array(2) { [0]=> string(4) "9:00" [1]=> int(1) } [1]=> array(2) { [0]=> string(5) "11:00" [1]=> int(0) } [2]=> array(2) { [0]=> string(5) "11:39" [1]=> int(1) } }