0

配列が配列にリストされているかどうかを検証しようとしています。製品名と URL をセッションに追加しようとしています。セッションには訪問者がアクセスしたすべての製品が含まれますが、同じ製品を 2 回追加したくないため、検証が必要です。したがって、製品が既に配列に含まれている場合は何もしないでください。ただし、製品がまだ配列に属していない場合は、追加する必要があります。これは私がこれまでに得た限りです。唯一の問題は検証のようです。

$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() に渡された変数は、C:\xampp\htdocs\customers\msl\product.php の 10 行目にある配列またはオブジェクトではありません

したがって、配列が既に多変量配列に含まれているかどうかを確認する方法を知りたいだけです。または、ここで私が望むものを達成するための他の選択肢がある場合。

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

2次元配列を取得します。

しかし、これは貧弱なデータ構造だと思います。$_SESSION['products']キーが製品名である連想配列を作成する必要があります。したがって、次のように要素を追加します。

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

そして、あなたは以下の製品を見つけます:

$found = isset($_SESSION['products'][$products_name]);
于 2013-07-02T07:16:03.250 に答える
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 に答える
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 に答える