Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56

    rimuovere righe duplicate in un array multidimensionale

    salve,
    ho il seguente array multidimensionale (dato dalla decodifica di un array JSON:
    codice:
    
    
    codice:
    Array (
    [0] => Array (
    [IDprodotto] => 10 [quantita] => 3
    )
    [1] => Array (
    [IDprodotto] => 2 [quantita] => 3
    )
    [2] => Array (
    [IDprodotto] => 10 [quantita] => 3
    )
    [3] => Array (
    [IDprodotto] => 10 [quantita] => 1
    )
    [4] => Array (
    [IDprodotto] => 9 [quantita] => 6
    ) )


    come potete vedere nella colonna "IDprodotto" ci sono dei valori duplicati (ovvero il 10), come faccio rimanere a rimanere una sola colonna con IDprodotto=10 ma la quantita è la somma di tutte le righe con IDprodotto=10?

    Ho fatto alcune prove solo che non riesco a sommare le quantita:

    codice:
    
    
    codice:
        $prodotti= json_decode($_COOKIE['acquisto'], true);
        echo 'array originale: <br/><br/>';
        print_r($prodotti);
        $tempArr = array_unique(array_column($prodotti, 'IDprodotto')); //converto prima l'array multi-dimensionale in mono-dimensionale
        $prodottinew= array_intersect_key($prodotti, $tempArr); //riconverto l'array in multi-dimensionale
        echo 'array senza duplicati: <br/><br/>';
        print_r($prodottinew);
    


  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Prima di aggiungere un prodotto al carrello controlla se già c'è, se c'è fai la somma e la salvi nella entry già esistente.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Prima di aggiungere un prodotto al carrello controlla se già c'è, se c'è fai la somma e la salvi nella entry già esistente.
    tutto chiaro grazie mille Alhazred

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Fa attenzione, sei sicuro che ti serva la somma? Cosa chiedi al cliente? Quanti articoli vuole aggiungere? In tal caso ok, ma se sceglie la quantità complessiva non dovrai fare la somma con ciò che già hai nel carrello, ma solo sovrascrivere la quantità già presente.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Fa attenzione, sei sicuro che ti serva la somma? Cosa chiedi al cliente? Quanti articoli vuole aggiungere? In tal caso ok, ma se sceglie la quantità complessiva non dovrai fare la somma con ciò che già hai nel carrello, ma solo sovrascrivere la quantità già presente.
    si in pratica da un form il cliente può scegliere la quantità del prodotto, poi se in seguito vuole più pezzi va a ricompilare questo form (in seguito voglio aggiungere una funzione direttamente nel carrello per modificare le quantità ma per ora va bene cosi)
    questo è il codice che ho scritto e sembra funzionare a dovere:
    codice:
    if(isset($_POST['IDprodotto'])&&isset($_POST['quantita']))
    {
        $IDprod= $_POST['IDprodotto'];
        $qta= $_POST['quantita'];
        if(isset($_COOKIE['acquisto'])) 
        {
    
    
            // ad un certo punto devo aggiungere un prodotto
            // cambio variabile solo per farti capire, in questo caso non sarebbe necessario
            $prodottiPHPnew = json_decode($_COOKIE['acquisto'], true);
            for ($row = 0; $row <count($prodottiPHPnew); $row++)
            {
                if ($IDprod == $prodottiPHPnew[$row]["IDprodotto"])
                    $prodottiPHPnew[$row]["quantita"]+=$qta;
            }
    
    
            //$prodottiPHPnew[] = ['IDprodotto' => $IDprod, 'quantita' => $qta];
            echo'array aggiornato<br>';
            print_r($prodottiPHPnew);
            
    
    
            // aggiorno l'array JSON
            $prodottiJS = json_encode($prodottiPHPnew);
            echo'<br><br>JSON aggiornato<br>';
            echo $prodottiJS; 
            setcookie("acquisto", $prodottiJS, time()+360000);
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Fa attenzione, sei sicuro che ti serva la somma? Cosa chiedi al cliente? Quanti articoli vuole aggiungere? In tal caso ok, ma se sceglie la quantità complessiva non dovrai fare la somma con ciò che già hai nel carrello, ma solo sovrascrivere la quantità già presente.
    Mi sono reso conto che con lo script che ti ho mandato non riesco ad aggiungere prodotti all'array quando questi non erano precedentemente presenti nell'array, ho pensato di risolvere il problema creando un altro array dove vado a mettere tutti i codici e quantità dei prodotti che non stavano precedentemente nell'array, ma non ho ottenuto il risultato sperato. Puoi dirmi a grandi linee come posso procedere?

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Ogni volta che l'utente richiede un'operazione sul carrello scorri tutto l'array alla ricerca di un prodotto con tale id, se lo trovi lo modifichi, se non lo trovi lo aggiungi.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ogni volta che l'utente richiede un'operazione sul carrello scorri tutto l'array alla ricerca di un prodotto con tale id, se lo trovi lo modifichi, se non lo trovi lo aggiungi.
    codice:
    if(isset($_POST['IDprodotto'])&&isset($_POST['quantita']))
    {
        $IDprod= $_POST['IDprodotto'];
        $qta= $_POST['quantita'];
        $IDNonPresente= false;
        
        if(isset($_COOKIE['acquisto'])) //se sono già presenti articoli nel carrello
        {
            $prodottiPHPnew = json_decode($_COOKIE['acquisto'], true);
            for ($row = 0; $row <count($prodottiPHPnew); $row++)
            {
                if ($IDprod == $prodottiPHPnew[$row]["IDprodotto"]) //se è già presente un prodotto nel carrello con lo stesso codice..
                    //$IDgiapresente= true;
                    $prodottiPHPnew[$row]["quantita"]+=$qta; //...vado solo a sommare le quantità
                
                else {
                    $prodottiPHPnew[] = ['IDprodotto' => $IDprod, 'quantita' => $qta]; //a questo punto si blocca
                }
            }
            echo'array aggiornato<br>';
            print_r($prodottiPHPnew);
    
    
            // aggiorno l'array JSON
            $prodottiJS = json_encode($prodottiPHPnew);
            echo'<br><br>JSON aggiornato<br>';
            echo $prodottiJS; 
            setcookie("acquisto", $prodottiJS, time()+360000);
            header("location: infoprodotto_new.php");
        }
    ho provato a fare in questo modo, fino a quando inserisco nel sempre lo stesso prodotto funziona bene.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Alhazred, non puoi aiutarmi? Sono 3-4 giorni che mi sono bloccato su questo punto e non riesco ad andare avanti. Per il resto il progetto è quasi terminato, mi resta da affinare delle ultime cose

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.