2013-07-02 166 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