Visualizzazione risultati 1 fino 17 di 17

Discussione: array_sum somma

  1. #1
    Guest

    Predefinito array_sum somma

    salve
    ho bisogno di fare la somma di un array ma non ci riesco. Ho provato così:
    l'array in questione è $record[3]

    Codice PHP:
    $somma=array($record[3]);
    $mix=array_sum($somma);
    echo
    $mix;
    ma non funziona. Come posso fare?
    ciao e grazie
    Ultima modifica di dreadnaut : 15-02-2012 alle ore 14.15.01 Motivo: + codice dal posto sotto, tag [php]

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    array_sum(), come primo parametro deve avere tutta l'array, senza definire l'indice, anche perché non ti stai riferendo ad un singolo elemento dell'array, ma a tutta l'array.

    P.S.: Hai scritto lo stesso codice due volte, non fare up, se hai sbagliato codice allora posta meglio il tuo codice.
    Ultima modifica di sevenjeak : 11-01-2012 alle ore 17.29.20

    Sevenjeak
    Software developer and much more

  3. #3
    Guest

    Predefinito

    grazie x la risposta
    ma non ho capito bene, potresti farmi un esempio? grazie

  4. #4
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Trovi un mucchio di esempi nella pagina che ti ho linkato.

    Sevenjeak
    Software developer and much more

  5. #5
    Guest

    Predefinito

    purtroppo non riesco a capire, qualche aiuto?

  6. #6
    L'avatar di dreadnaut
    dreadnaut è connesso ora Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Se il tuo array è $record[3], perché non sommi direttamente quello?

    Codice PHP:
    $mix = array_sum( $record[3] );
    echo
    $mix;
    Ricorda che array_sum() prende un array contente numeri, e ne somma gli elementi. Se l'array contiene altri dati, o altri array, non funzionerà.

  7. #7
    Guest

    Predefinito

    forse allora è quello il problema. I valori del db sono varchar, e forse è per questo che non li somma. Ma che tipi di dati devo usare se devo sommare numeri decimali come 0,99?
    ciao

  8. #8
    L'avatar di dreadnaut
    dreadnaut è connesso ora Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    fai una cosa, stampa l'array e postalo qua:
    Codice PHP:
    echo var_dump($record[3]);

  9. #9
    Guest

    Predefinito

    mi dice
    NULL

    il campo del db è impostato come decimal.

  10. #10
    L'avatar di dreadnaut
    dreadnaut è connesso ora Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Se ti dice null, non c'è dentro niente. Controlla di estrarre i dati correttamente dal database, e metti un
    Codice PHP:
    error_reporting(E_ALL);
    all'inizio del tuo script, così eventuali errori verranno stampati nella pagina.

  11. #11
    Guest

    Predefinito

    ho fatto e mi dice
    Codice:
    Warning: array_sum() [function.array-sum]: The argument should be an array in /membri/provaofferte/ese.php on line 85
    i dati nel db e nella colonna sono corretti. Di seguito posto l'intero codice

    Codice PHP:
    <html>

    <head>
    <style type="text/css">
    body{
    margin-left: .5cm;
    margin-right: .5cm;
    color: black;
    font-family: Verdana, Arial, sans-serif;
    font-size: 10pt;
    }
    </style>
    </head>
    <?php
    $nomeDB
    = "";
    $connessione = mysql_connect("", "", "") or die("Connessione al Server non possibile.");
    mysql_select_db($nomeDB, $connessione) or die("Connessione al DB non possibile.");
    $q = 'select tab.* from ( select * from tab1 union all select * from tab2 union all select * from tab3) tab where 1=1';
    if (isset(
    $_POST['c1']) || isset($_POST['c2']) || isset($_POST['c3'])) {
    $q.= " && (1=0";
    if (isset(
    $_POST['c1'])) {
    $q.= " || genere = 'elemento1' ";
    }
    if (isset(
    $_POST['c2'])) {
    $q.= " || genere = 'elemento2' ";
    }
    if (isset(
    $_POST['c3'])) {
    $q.= " || genere = 'elemento3' ";
    }
    $q.= ")";
    }

    $q.= " order by nome";
    $id_ris = mysql_query($q)
    or die(
    "Non è possibile eseguire la query!<br/>" . $q . "<br/>" . mysql_error());
    $num_libri = mysql_num_rows($id_ris);
    mysql_data_seek($id_ris, 0);
    echo
    "<table border='0' width='700px'>";
    echo
    "<tr>";
    echo
    "<td><b>Tipo</b></td>";
    echo
    "<td><b>Quantità</b></td>";
    echo
    "<td><b>Prezzo</b></td>";
    echo
    "<td><b>Genere</b></td>";
    echo
    "<td><b>Nome</b></td>";
    echo
    "</tr>";
    for (
    $i = 0; $i < $num_libri; $i++) {
    $record = mysql_fetch_array($id_ris);
    echo
    "<td>", $record[0], "</td>";
    echo
    "<td>", $record[1], "</td>";
    echo
    "<td>", $record[2], "</td>";
    echo
    "<td>", $record[3], "</td>";
    echo
    "<td>", $record[4], "</td>";
    echo
    "</tr>";
    }
    echo
    "</table>";
    echo
    var_dump($record[2]);
    error_reporting(E_ALL);
    $mix = array_sum( $record[2] );
    echo
    $mix;
    ?>
    </html>
    Ultima modifica di provaofferte : 15-02-2012 alle ore 17.26.35

  12. #12
    L'avatar di dreadnaut
    dreadnaut è connesso ora Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    A parte che error_reporting andrebbe in cima allo script, così da poter vedere tutti gli errori, c'è un problema più grosso.

    $record[2] non è neanche lontanamente un'array di numeri, ma un singolo valore. Se vuoi fare la somma di tutte i prezzi hai due possibilità:
    1. sommi i numeri man mano nel ciclo for in cui li visualizzi, oppure

    2. usi una query apposita con SUM().

  13. #13
    Guest

    Predefinito

    la query non posso usarla perchè lo script è collegato a delle checkbox, e mi deve visualizzare solo i risultati selezionati con le checkbox. Per quanto riguarda il ciclo for non è che potresti dirmi come fare? grazie mille

  14. #14
    L'avatar di dreadnaut
    dreadnaut è connesso ora Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    A fare una somma con un ciclo for?

    Codice PHP:
    $array = array( 1,2,3,4,5 );

    $totale = 0;
    for (
    $i = 0; $i < count($array); $i++)
    $totale += $array[$i];

    echo
    $totale;

  15. #15
    Guest

    Predefinito

    ma come integro questo ciclo con il codice che ho postato?

  16. #16
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,273

    Predefinito

    Ti consiglio di fare molti esercizi con while/for/if, perché queste cose sono fondamentali.

    Codice PHP:
    for ($i = 0, $somma = 0; $i < $num_libri; $i++) {
    $record = mysql_fetch_array($id_ris);
    $somma += $record[2];
    echo
    "<td>", $record[0], "</td>";
    echo
    "<td>", $record[1], "</td>";
    echo
    "<td>", $record[2], "</td>";
    echo
    "<td>", $record[3], "</td>";
    echo
    "<td>", $record[4], "</td>";
    echo
    "</tr>";
    }
    echo
    '</table>La somma del terzo elemento è: '.$somma;
    Ciao!

  17. #17
    Guest

    Predefinito

    grazie mille, ma a me servirebbe la somma di ogni tabella estratta dalla query. Come puoi vedere nella query ci sono tre tabelle e io vorrei avere la somma non di tutte e tre inseme ma prima di una e poi delle altre.

    Ps - hai ragione x quanto riguarda gli esercizi da fare

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •