检查数组是否在数组中

时间:2013-07-02 07:07:04

标签: php arrays

我正在尝试验证数组是否列在数组中。 我正在尝试将一个产品名称和URL添加到会话中,该会话将包含访问者访问的所有产品,但我不希望它两次添加相同的产品,因此验证。因此,如果产品已经在数组中,我希望它什么都不做,但如果它不属于数组,则需要添加它。到目前为止,这是我所得到的。唯一的问题似乎是验证。

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

这些是我得到的错误

警告:传递给each()的变量不是第10行的C:\ xampp \ htdocs \ customers \ msl \ product.php中的数组或对象

警告:传递给each()的变量不是第10行的C:\ xampp \ htdocs \ customers \ msl \ product.php中的数组或对象 结果

所以我只想知道如何检查数组是否已经存在于多变量数组中。或者,如果有任何其他选择来实现我想要的东西。

4 个答案:

答案 0 :(得分:1)

变化:

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

为:

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

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

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

添加元素
$_SESSION['products'][$products_name] = $viewed_product_url;

你找到的产品有:

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

答案 1 :(得分:0)

is_array一样检查

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

然后您可以使用foreach

答案 2 :(得分:0)

is_array()函数会帮助你..   http://php.net/manual/en/function.is-array.php

答案 3 :(得分: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);

} }