2017-10-02 5 views
4
include('session.php'); 

$productname = $_GET['productname']; 
$productcode = $_GET['productcode'];  

$wishlist = array("$productname" => $productcode);  

$_SESSION["wishlist"] = $wishlist; 

print_r($_SESSION["wishlist"]); 

Ce code est défini comme un tableau pour une session nommée "wishlist".
Le problème est que la session est en train d'être remplacée. Je veux ajouter au tableau s'il existe déjà. Comment puis-je mettre à jour mon tableau avec de nouvelles données. J'ai essayé ce qui suit.Comment ajouter de la valeur au tableau associatif stocké en session?

$productname = $_GET['productname']; 
$productcode = $_GET['productcode']; 
$lastsession = $_SESSION["wishlist"]; 

// CHECK IF SESSION IS EMPTY OR NOT 
if(empty($lastsession)) { 
    $wishlist = array("$productname" => $productcode); 
} else { 
    /* 
     How Can I Update array ???  
    */ 
} 

La sortie du tableau est similaire. Il est associé non indexé numériquement. Et je veux le résultat en un seul tableau. Pas de tableau dans le tableau.

[mobile] => iphone_2 

Merci.

Répondre

3

En bref, vous pouvez le faire (si je comprends bien la question):

$productname = $_GET['productname']; 
$productcode = $_GET['productcode']; 
$lastsession = $_SESSION["wishlist"]; 

// CHECK IF SESSION IS EMPTY OR NOT 
if(empty($lastsession)) { 
    $wishlist = array("$productname" => $productcode); 
} else { 
    array_push($wishlist, array("$productname" => $productcode)); 
} 

array_push est une fonction qui ajoutera des informations à la fin d'un tableau. Dans ce cas, nous l'utilisons pour ajouter le tableau de produits à la wishlist actuelle.

Une solution alternative simple serait:

// create a blank array if the session variable is not created 
// array_push requires an array to be passed as the first parameter 
$wishlist = isset($_SESSION["wishlist"]) ? $_SESSION["wishlist"] : array(); 
//$wishlist = $_SESSION["wishlist"] ?? array(); // this is for PHP 7+ 
array_push($wishlist, array("$productname" => $productcode)); 

// you can then access each product as: 
$wishlist["mobile"]; 

Ou remplacer la ligne 5 de l'extrait de code ci-dessus avec les éléments suivants:

$wishlist[$productname] = $productcode; 

Cela vous évitera de créer un tableau vide comme ligne 3.
L'avantage que array_push a sur ceci est que vous pouvez ajouter plusieurs produits à la fois tels que:

$products = [$productname1 => $productcode1, $productname2 => $productcode2]; 
array_push($wishlist, $products); 

La seule chose que j'ai remarqué est que vous définissez la session à $lastsession ainsi qu'à $wishlist. Essayez de garder les variables en double inexistantes.

+0

si je stocke de nombreuses valeurs en séance? jusqu'à 10+ mb – TarangP

+0

Est-ce que [ce lien] (https://stackoverflow.com/a/4649934/3578036) répond à votre question? Il indique que la taille maximale par défaut d'une session est de 128 Mo – JustCarty

+0

array_push ($ wishlist, array ("$ productname" => $ productcode)); cela va créer un nouveau tableau dans le tableau. Je veux juste ajouter de la valeur pas de tableau alors quelle solution j'ai? – TarangP

0

Définissez les données de liste de souhaits de la session à variable, puis ajoutez simplement le nouveau produit à cette variable. Après cela, mettez à jour les données de la liste de souhaits dans la session.

$productname = $_GET['productname']; 
$productcode = $_GET['productcode']; 

// do the same as: $wishlist = !empty($_SESSION["wishlist"]) ? $_SESSION["wishlist"] : []; 
$wishlist = $_SESSION["wishlist"] ?? []; 

$wishlist[$productname] = $productcode; 
$_SESSION["wishlist"] = $wishlist; 

print_r($_SESSION["wishlist"]); 
+0

$ wishlist = $ _SESSION ["wishlist"] ?? []; Pouvez-vous s'il vous plaît peu décrire cela – TarangP

+1

Il s'agit d'une nouvelle fonctionnalité de PHP7 'Null coalescing operator' (http://php.net/manual/fr/migration70.new-features.php#migration70.new-features.null-coalesce-op) – Neodan

0
$_SESSION["wishlist"] = array('product1' => 'product1 Name'); 
// Initial products in session 

$temp_session = $_SESSION["wishlist"]; 
//store products in wishlist in temp variable 

$temp_session['mobile'] = 'iphone_2'; 
// Add new product to temp variable 

$_SESSION["wishlist"] = $temp_session; 
//Update session 

print_r($_SESSION["wishlist"]); 
+0

vous ne pensez pas que ce processus est long lorsque les données sont volumineuses ? – TarangP

+0

Oui, ne pas optimiser optimalement, mais je veux juste démontrer comment h e peut mettre à jour le tableau de session – shashi

+0

Pourquoi ne pas juste '$ _SESSION [" wishlist "] [" mobile "] =" iphone_2 ";' C'est effectivement ce que vous faites, mais en plusieurs étapes. Après tout, $ _SESSION est un tableau multidimensionnel. – JustCarty