[PHP] eliminare elemento da un array multidimensionale

cosmo98

Nuovo Utente
29 Mag 2018
7
0
1
salve, ho il seguente array
PHP:
Array (
[0] => Array (
 [IDprodotto] => 10 [quantita] => 1
)
[1] => Array (
 [IDprodotto] => 1 [quantita] => 1
)
[2] => Array (
[IDprodotto] => 9 [quantita] => 3
)
[3] => Array (
[IDprodotto] => 17 [quantita] => 2
 )
[4] => Array (
[IDprodotto] => 1 [quantita] => 1
 )
 [5] => Array (
[IDprodotto] => 10 [quantita] => 1
) )
come faccio ad eliminare una riga dall'array dato un valore di IDprodotto ad esempio 9 passato tramite il metodo GET o POST?
Grazie in anticipo
 
Ultima modifica di un moderatore:

macus_adi

Utente Attivo
5 Dic 2017
1.038
59
48
IT/SW
PHP:
foreach($_POST as $k=>$v){
     if($v['IDprodotto']==9)unset($_POST[$k]);
}

$_POST=array_values($_POST);
 

cosmo98

Nuovo Utente
29 Mag 2018
7
0
1
PHP:
foreach($_POST as $k=>$v){
     if($v['IDprodotto']==9)unset($_POST[$k]);
}

$_POST=array_values($_POST);
ciao innanzitutto grazie per avermi risposto, ho provato a fare come mi hai suggerito ma non funziona. Nel frattempo ho provato a fare cosi:
PHP:
        foreach($prodotti as $k=>$v){
             if($v['IDprodotto']==$_GET['id'])
                //echo 'id presente nell array <br/><br/>';
                unset($v['IDprodotto']);
        }
ma nemmeno funziona. $prodotti nel foreach rappresenta l'array in questione
 

macus_adi

Utente Attivo
5 Dic 2017
1.038
59
48
IT/SW
Perchè non dovrebbe funzionare, forse hai sbagliato....
Ti allego un file per effettuare qualche prova...

PHP:
//elimina dall'array passato per riferimento un valore data una chiave
function elimina_elementi_array(&$ar,$value_delete=0,$key_delete='IDprodotto'){

    foreach ($ar as $k=>$v){
        if($v[$key_delete]==$value_delete)unset($ar[$k]);
    }
    $ar=array_values($ar);

}
//crea l'array prodotti
function create_array_prodotti(){
    $prd=[];
    for($i=0;$i<20;$i++){
        $prd[]=['IDprodotto'=>$i,'qta'=>rand(0,1000)];
    }
    return $prd;
}
//carico array prodotti
$prodotti=create_array_prodotti();
//elimino da prodotti il prodotto con ID 9
elimina_elementi_array($prodotti,9);
//stampo l'array
print_r($prodotti);
Questo non è altro che il codice di sopra.... sicuro che il tuo array sia formattato in questo modo?
 

cosmo98

Nuovo Utente
29 Mag 2018
7
0
1
aspetta forse non mi sono spiegato bene, quel 9 è un valore passato tramite GET o POST (al momento ho scelto GET), non è un valore fisso che sta sempre nell'array
 

cosmo98

Nuovo Utente
29 Mag 2018
7
0
1
rileggendo bene il secondo script che mi hai mandato adesso funziona, l'errore stava nel foreach del primo script che mi hai mandato: al posto di ciclare l'array andavi a ciclare $_POST
grazie per l'aiuto
 

macus_adi

Utente Attivo
5 Dic 2017
1.038
59
48
IT/SW
al posto di ciclare l'array andavi a ciclare $_POST
E quale variabile avrei dovuto ciclare se non la specifichi?
come faccio ad eliminare una riga dall'array dato un valore di IDprodotto ad esempio 9 passato tramite il metodo GET o POST?
Grazie in anticipo
Visto che non era specificato ho utilizzato la var POST... Quando inizi dei nuovi thread, se vuoi fare copia/incolla devi specificare le variabili utilizzate essendo il più preciso possibile, in mancanza di specifiche si utilizza un pò quello che si vuole in quel momento, e non si può dire che non funziona se si incolla in modo brutale senza leggere attentamente il codice...
 

cosmo98

Nuovo Utente
29 Mag 2018
7
0
1
secondo lo stesso array multidimensionale (dato dalla decodifica di un array JSON), come faccio a togliere i valori duplicati della colonna "IDprodotto" (ovvero il 10), rimanendo 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:
PHP:
$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);
 

macus_adi

Utente Attivo
5 Dic 2017
1.038
59
48
IT/SW
PHP:
function remove_duplicati(&$ar,$key_check='IDprodotto'){
    $exs=[];
    foreach ($ar as $k=>$v){
        if(!in_array($v[$key_check],$exs))$exs[]=$v[$key_check];
        else unset($ar[$k]);
    }
}
Funzione per rimuovere duplicati.... Devi passare l'array per riferimento ed elimina gli item duplicati secondo la key_check!!!