2013-07-02 122 views
0

我想验证数组是否列在数组中。 我试图将产品名称和网址添加到会话中,该会话将包含访问者访问的所有产品,但我不希望它添加两次相同的产品,因此进行验证。因此,如果产品已经在数组中,我希望它什么都不做,但是如果它不属于数组,它需要被添加。这是迄今为止我所知道的。唯一的问题似乎是验证。检查数组是否在数组中

$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); 
} 
} 

这些是我正在

警告错误:传递给每个()变量不是数组或对象在C:\ XAMPP \ htdocs中\客户\ MSL \ product.php第10行

警告:传递给每个()变量不是数组或对象在C:\ XAMPP \ htdocs中\用户\ MSL \ product.php上线10 发现

所以我只是想知道你怎么可以检查数组是否已经在多元数组中。或者如果有其他替代方案可以实现我在这里想要的。

+1

你治疗'$ _SESSION [ '产品']'作为一个2维数组。但是当你初始化它时,它只是一个一维关联数组。 – Barmar

回答

0

is_array检查像

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

,然后你可以用foreach

+0

似乎无法工作的'is_array' –

1

变化:

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

至:

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

这样就可以得到一个2维数组。

但是,我认为这是一个糟糕的数据结构。您应该使$_SESSION['products']为关联数组,其关键是产品名称。所以你添加元素把它与:

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

,你会发现产品:

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

$each_item不是一个数组。这是错误的原因。

试试这个

$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

中的'Traversable'对象产生错误 – Source

+0

错误是什么? – Wishnu