我正在尝试验证数组是否列在数组中。 我正在尝试将一个产品名称和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中的数组或对象 结果
所以我只想知道如何检查数组是否已经存在于多变量数组中。或者,如果有任何其他选择来实现我想要的东西。
答案 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);
} }