Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Problema con somma di numeri visti come stringa

    ciao!

    sto facendo una cosa del genere per fare una somma di valori presi dal db:
    Codice PHP:
    array_filter($queryOrdini, function($item) use ($agenteZona$coll$totCollQtaAgente) {
        if (
    $agenteZona == $item['zona'] && $coll == $item['collezione']) {
            
    $tmpQta intval($item['tot_qta']);
            
    $totCollQtaAgente += $tmpQta;
            echo 
    $totCollQtaAgente;
        }
    }); 
    il problema è che dovrebbe stampare 2021 (che è la somma di 1137+884).
    invece stampa 8841137.
    come posso fare??

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Prova a scrivere prima del ciclo.

    $totCollQtaAgente = 0;
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Prova a scrivere prima del ciclo.

    $totCollQtaAgente = 0;
    si l'ho già messo!
    cerco sempre di inizializzare le variabili, anche se non è necessario in php.

    non vorrei che fosse l'array_filter che "da fastidio".

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    E con uno trim($item["tot_qua"]) ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    ho provato anche così:
    Codice PHP:
    array_filter($queryOrdini, function($item) use ($agenteZona$coll$totCollQtaAgente) {
        if (
    $agenteZona == $item['zona'] && $coll == $item['collezione']) {
            
    $tmpQta intval(trim($item['tot_qta']));
            echo 
    gettype($tmpQta);
            
    $totCollQtaAgente += $tmpQta;
            echo 
    $totCollQtaAgente;
        }
    }); 
    quel gettype mi da sempre integer, quindi lo vede anche come numero.
    è assurda sta cosa!

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Potresti anche postare l’array ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    si eccolo (in parte, perchè sono svariati records):

    codice:
    array(447) {   [0]=>   array(8) {     ["collezione"]=>     string(4) "C180"     ["zona"]=>     string(3) "Z27"     ["agente"]=>     string(11) "AGENTE"     ["cliente"]=>     string(6) "CODICE_CLIENTE"     ["ragsoc"]=>     string(15) "RAG SOC"     ["tot_netto"]=>     string(7) "5272.50"     ["tot_lordo"]=>     string(7) "5272.50"     ["tot_qta"]=>     string(2) "90"   }   [1]=>   array(8) {     ["collezione"]=>     string(4) "C180"     ["zona"]=>     string(3) "Z27"     ["agente"]=>     string(11) "AGENTE"     ["cliente"]=>     string(6) "CODICE CLIENTE"     ["ragsoc"]=>     string(33) "CLIENTE"     ["tot_netto"]=>     string(7) "2210.50"     ["tot_lordo"]=>     string(7) "2210.50"     ["tot_qta"]=>     string(2) "42"   }
    ..............

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Te la butto là:
    La tua funzione anonima prende le variabili per valore, quindi $totCollQtaAgente è sempre 0 (o il valore assegnato all'inizio).
    Inoltre, visto che stampi dentro la funzione avrai l'impressione di concatenare i valori:
    (0+$item[0]:$tmpQta)(0 + $item[1]:$tmpQta)(0 + $item[2]:$tmpQta) etc

    Prova a mettere &$totCollQtaAgente nel use

    PS: Cmq, non mi pare che la callback di array_filter serva per quello che stai facendo tu. Dovresti usarla come discriminante per "prendere o scartare" un elemento dell'array originale
    Ultima modifica di boots; 05-07-2018 a 10:49

  9. #9
    ciao!

    neanche usando &$totCollQtaAgente funziona.
    da un altro risultato ancora.

    per quanto riguarda array_filter, forse si non è proprio il suo migliore.
    io dovrei cercare dei valori dentro all'array, e sommare la colonna quantità quando trovata.
    non mi viene in mente altro, se non eseguire una ulteriore query parametrizzata dentro al foreach.

  10. #10
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Codice PHP:
    $queryOrdini = [1,2,3,4];
    $total 0;
    array_filter($queryOrdini, function($item) use (&$total) {
        
    $total += $item;
    });  
    echo 
    $total
    Prova questo codice con e senza &, dovrebbe essere più o meno la tua situazione

    PS: Ma un classico foreach, no?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.