[PHP] eliminare elemento da un array multidimensionale

  • Creatore Discussione Creatore Discussione cosmo98
  • Data di inizio Data di inizio

cosmo98

Nuovo Utente
29 Mag 2018
9
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:
PHP:
foreach($_POST as $k=>$v){
     if($v['IDprodotto']==9)unset($_POST[$k]);
}

$_POST=array_values($_POST);
 
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
 
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?
 
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
 
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
 
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...
 
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);
 
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!!!
 

Discussioni simili