Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Probabile problema Array_push

    Ciao Raga, urge aiuto, please
    non riesco proprio a capire dov'è l'errore.

    Il codice sotto riportato genera un json utilizzato per il render di un grafico (fusioncharts)

    Funziona tutto il problema è che gli array che vengono a crearsi presentano duplicato il primo valore poi continua correttamente, il problema dovrebbe essere nel secondo array_push quello delle seriesname ma non capisco qual'è.

    Ovviamente ho verificato la query e presenta i datti corretti, il problema è proprio questo script che genera il json che ho verificato ed appunto duplica i primi valori.
    Ho subito pensato all'operatore incrementale ($i=0) che non fosse corretto, ma cambiandolo il grafico no funziona
    codice:
    if ($resultData) {
    
        $arrData = array(
            "chart" => array(
                "caption" => "",
                "bgColor" => "#ffffff",            
                "showBorder"=> "0",            
                "palettecolors" => "#e0e0e0,#13ac0b,#f72b10,#f59054",
                "theme"=> "fusion"
    )
        );
    
        $arrData["categories"] = array(array("category" => array()));
        if ($resultCategories) {
           $controlBreakValue = "";
            while ($row = mysqli_fetch_array($resultCategories)) {
                if ($controlBreakValue != $row["station"]) {
                    $controlBreakValue = $row["station"];
                    array_push( $arrData["categories"][0]["category"], array("label" => $controlBreakValue));
                    $controlBreakValue == "";
               }
            }
        }
    
        $arrData["dataset"] = array();
        $i = 0;
        if ($resultData) {
            $controlBreakValue = "";
            while ($row = mysqli_fetch_array($resultData)) {
                if ($controlBreakValue != $row["tipo_risposta"]) {
                    $controlBreakValue = $row["tipo_risposta"];
                    array_push($arrData["dataset"], array("seriesname" => $controlBreakValue, "data" => array(array("value" => $row["totali"]))));
                    $controlBreakValue == "";
                    $i++;
                }
                array_push($arrData["dataset"][$i -1]["data"], array("value" => $row["totali"]));
            }
        }
    }
    
    $jsonEncodedData = json_encode($arrData);

  2. #2
    Inserisco anche parte del json, in sostanza i valori in grassetto non dovrebbero venire fuori, sono duplicati dovrebbe partire tutto dalla seconda serie di valori che come si può vedere è la stessa.

    Le query sono 2.
    La prima sempre per le categorie, le etichette (AG, AL, AN, etc.)
    La seconda per le seriesname, i loro valori ( NULL, SI,NO, Na)

    codice:
    categories":[{"category":[{"label":"AG"},{"label":"AL"},{"label":"AN"}]}],"dataset":[{"
    seriesname":"NULL","data":[{"value":null},{"value":null},{"value":null},{"value":null}]},{"
    seriesname":"SI","data":[{"value":"61"},{"value":"61"},{"value":"37"},{"value":"48"}]},{"
    seriesname":"NO","data":[{"value":null},{"value":null},{"value":"13"},{"value":"10"}]},{"
    seriesname":"Na","data":[{"value":null},{"value":null},{"value":"11"},{"value":"3"}]}]}

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    58
    Prova sostituendo in array_push($arrData["dataset"]["data"][$i-1], array("value" => $row["totali"]));

  4. #4
    Quote Originariamente inviata da darbula Visualizza il messaggio
    Prova sostituendo in array_push($arrData["dataset"]["data"][$i-1], array("value" => $row["totali"]));
    Grazie darbula,
    ho provato ma niente da fare, invertendo l'operatore non si genera il json

    Warning: array_push() expects parameter 1 to be array

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,589
    Semplicemente stai inserendo due volte $row['totali']:
    1. Quando $controlBreakValue != $row["tipo_risposta"] e poi
    2. subido dopo, quando esci dal if

    if ($controlBreakValue != $row["tipo_risposta"]) {
    $controlBreakValue = $row["tipo_risposta"];
    array_push($arrData["dataset"], array("seriesname" => $controlBreakValue, "data" => array(array("value" => $row["totali"]))));
    $controlBreakValue == "";
    $i++;
    }
    array_push($arrData["dataset"][$i -1]["data"], array("value" => $row["totali"]));

    Dentro l'if ti basta definire "data" => array(). $row['totali'] l'inserirai poi nella array_push subito sotto
    Ultima modifica di boots; 17-01-2021 a 13:06

  6. #6
    Quote Originariamente inviata da boots Visualizza il messaggio
    Dentro l'if ti basta definire "data" => array(). $row['totali'] l'inserirai poi nella array_push subito sotto
    Ho provato in tutti i modi ma non va.
    Se modifico il costrutto php per la generazione del json (che tra l'altro non è di mia produzione ma scaricato da esempi ufficiali direttamente da sito del produttore dei grafici, fusioncharts.com) va in errore.

    Ho provato anche un altro codice utilizzando per il rendering XLM invece che JSON e funziona, ma ho bisogno di utilizzare JSON, ti posto il codice per capire se puoi aiutarmi tu o altri.

    In effetti nel codice XLM viene inserito una volta sola il valore dei totali

    Codice PHP:
    // to generate json
    $arrData["dataset"] = array();
    $i 0;
    if (
    $resultData) {
        
    $controlBreakValue "";
        while (
    $row mysqli_fetch_array($resultData)) {
            if (
    $controlBreakValue != $row["categorie_full_name"]) {
                
    $controlBreakValue $row["categorie_full_name"];
                
    array_push($arrData["dataset"], array("seriesname" => $controlBreakValue"data" => array(array("value" => $row["totali"]))));
                
    $controlBreakValue == "";
                
    $i++;
            }
            
    array_push($arrData["dataset"][$i 1]["data"], array("value" => $row["totali"]));
        }
    }


    // to generate xlm
    if ($resultData){
        
    $controlBreakValue ="";
        while(
    $row mysqli_fetch_array($resultData)){
            if( 
    $controlBreakValue != $row["categorie_full_name"] ){
                if(
    $controlBreakValue !=""){
                    
    $xmlData .= "</dataset>";
                }
                
    $controlBreakValue =  $row["categorie_full_name"];
                
    $xmlData .= "<dataset seriesName=\" $controlBreakValue \">";
                
    $controlBreakValue =="";
            }
            
    $xmlData .= "<set value=\"" $row["totali"] . "\"/>";
        }
        
    $xmlData .= "</dataset>";


  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,589
    Scusa ma l'errore è quello: quando la condizione del if è vera inserisci due volta lo stesso valore, una nel if ed una subito dopo.

    In teoria mettendo
    Codice PHP:
    if($controlBreakValue != $row["categorie_full_name"]){
       ...
       
    array_push($arrData["dataset"], array("seriesname" => $controlBreakValue"data" => array()));
       ...

    dovresti risolvere, in quanto data lo "riempi" solo fuori dal if

    in alternativa metti la seconda array_push nel else:

    Codice PHP:
    if ($controlBreakValue != $row["categorie_full_name"]) {
      ...
    }else{
      
    array_push($arrData["dataset"][$i 1]["data"], array("value" => $row["totali"]));


  8. #8
    Quote Originariamente inviata da boots Visualizza il messaggio
    in alternativa metti la seconda array_push nel else:
    Codice PHP:
    if ($controlBreakValue != $row["categorie_full_name"]) {
      ...
    }
    else{
      
    array_push($arrData["dataset"][$i 1]["data"], array("value" => $row["totali"]));

    uhm... sono proprio un ...
    la soluzione era proprio un semplice else !!

    Grazie boots !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.