0

我正在尝试验证数组中是否列出了数组。我正在尝试将产品名称和 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

4 回答 4

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]);
于 2013-07-02T07:16:03.250 回答
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);

} }

于 2013-07-02T07:26:01.280 回答
0

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

于 2013-07-02T07:10:29.183 回答
0

检查is_array喜欢

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

然后你可以去foreach

于 2013-07-02T07:08:45.430 回答