2013-07-02 6 views
0

J'essaie de savoir si un tableau est répertorié ou non dans un tableau. J'essaie d'ajouter un nom de produit et une url à une session, la session contiendra tous les produits visités par un visiteur, mais je ne veux pas qu'elle ajoute deux fois le même produit, d'où la validation. Donc, si le produit est déjà dans le tableau, je veux qu'il ne fasse rien, mais s'il n'appartient pas déjà au tableau, il doit être ajouté. C'est aussi loin que je suis allé jusqu'ici. Le seul problème semble être la validation.Vérification de la présence d'un tableau dans un tableau

$viewed_product_url = $viewed_base.$_SERVER['REQUEST_URI']; 
if(!isset($_SESSION['products'])) { 
$_SESSION['products'] = array('product'=>$products_name,'url'=>$viewed_product_url); 
} else { 
$found = false; 
foreach($_SESSION['products'] as $each_item) { 
    while(list($key,$value)=each($each_item)) { 
     if($key == 'product' && $value == $products_name) { 
      $found = true; 
     } 
    } 
} 
if($found==false){ 
echo 'found'; 
    $_SESSION['products'][] = array('product'=>$products_name,'url'=>$viewed_product_url); 
} 
} 

ce sont les erreurs que je reçois

Attention: variable transmise à chaque() ne sont pas un tableau ou un objet dans C: \ xampp \ htdocs \ clients \ MSL \ product.php sur la ligne 10

Attention: variable passée à chaque() n'est pas un tableau ou un objet dans C: \ xampp \ htdocs \ clients \ MSL \ product.php sur la ligne 10 trouvé

Je veux juste savoir comment vous peut vérifier si un tableau est déjà dans un tableau multivarié. Ou s'il y a d'autres alternatives pour réaliser ce que je veux ici.

+1

Vous traitez '$ _SESSION [ 'produits']' comme un tableau à 2 dimensions. Mais quand vous l'initialisez, c'est juste un tableau associatif à 1 dimension. – Barmar

Répondre

0

chèque avec is_array comme

if(is_array($_SESSION['products'])) 

et vous pouvez aller avec foreach

+0

objets 'Traversable' donnent faux dans' is_array' –

1

Change:

$_SESSION['products'] = array('product'=>$products_name,'url'=>$viewed_product_url); 

à:

$_SESSION['products'] = array(array('product'=>$products_name,'url'=>$viewed_product_url)); 

afin que vous obteniez un tableau bidimensionnel.

Cependant, je pense que c'est une mauvaise structure de données. Vous devez créer $_SESSION['products'] un tableau associatif dont la clé est le nom du produit. Il faut donc ajouter des éléments à avec:

$_SESSION['products'][$products_name] = $viewed_product_url; 

et vous trouverez des produits avec:

$found = isset($_SESSION['products'][$products_name]); 
0

$each_item est pas un tableau. C'est la raison de l'erreur.

Essayez cette

$viewed_product_url = $viewed_base.$_SERVER['REQUEST_URI']; 
if(!isset($_SESSION['products'])) { 
$_SESSION['products'] = array('product'=>$products_name,'url'=>$viewed_product_url); 
} else { 
$found = false; 
if (in_array($viewed_product_url, $_SESSION['products'])) { { 
     $found = true; 
    } 
} 
} 
if($found==false){ 
echo 'found'; 
$_SESSION['products'][] = array('product'=>$products_name,'url'=>$viewed_product_url); 

}}

+0

qui n'a pas semblé fonctionner – Source

+0

Quelle est l'erreur? – Wishnu

Questions connexes