1

私はVBから来ました。アクセス; 最近 WAMP に導入された SQL Server のバックグラウンド。ここ数週間解決できていない問題があります。Web 上のすべてのフォーラム (ここを含む) にアクセスしても成功しなかったと思います。

MySQL レコードセットから 2 つの配列を作成しました。1 つはサイトのカート用で、もう 1 つはサイト部門 (カタログ) の 1 つです。以下の埋められた配列の手動解釈を参照してください。

$catalog[] = array( 
  array('ProdID'=>2,'Name'=>'Alpha','DepID' =>2,'InBasket'=>'0'),       
  array('ProdID'=>6,'Name'=>'Alpha','DepID' =>2,'InBasket'=>'0'),
  array('ProdID'=>7,'Name'=>'Alpha','DepID' =>2,'InBasket'=>'0'),
  array('ProdID'=>8,'Name'=>'Alpha','DepID' =>2,'InBasket'=>'0'),
  array('ProdID'=>9,'Name'=>'Alpha','DepID' =>2,'InBasket'=>'0'),
);


$cart[] = array(
  array('Name'=>'Alpha2','Loc'=>'e_vol1','BasketID'=>'81','ProdID'=>'2','Quant'=>'1'),
  array('Name'=>'Beta4','Loc'=>'e_vol2','BasketID'=>'81','ProdID'=>'4','Quant'=>'1'),
  array('Name'=>'Alpha8','Loc'=>'e_vol3','BasketID'=>'81','ProdID'=>'8','Quant'=>'1'),
  array('Name'=>'Gamma21','Loc'=>'e_vol4','BasketID'=>'81','ProdID'=>'21','Quant'=>'1'),
);

私がする必要があるのは、新しいカタログが選択されるたびにカタログ配列をループし、カート内の各行の ProdID をカタログの各行の ProdID と比較し、一致が見つかったときにカタログを更新したいことですその行の「InBasket」の値が「1」になるだけで、アイテムがすでに顧客のカートに入っていることを示し、画面に表示できます (顧客はいずれかのアイテムを 1 つだけ購入できます)。

カートには最大 10 個の製品が含まれる 5 つの異なる部門 (カタログ) があり、たとえば 4 つのアイテムが含まれます (運が良ければ)。

いくつかのループを試しましたが、うまくいかないようです。

for ($x = 0; $x < count($catalog); $x++)
{
  for ($y = 0; $y < count($cart); $y++)
  {
    If ($catalog[$x]['ProductID'] == $cart[$y]['ProductID'] )
    {
      $cart[$x]['InBasket'] = 1;
    }
  }
}

私の配列は正しいと思いますが、ループは関係なく「InBasket」を更新しているようです。

どんなアイデアでも大歓迎です。

4

4 に答える 4

4

$cartという配列キーがありますが、存在しないものProdIDを使用しようとしています。次に、実際には配列のメンバーである場合に、サブ配列のキーProductIDを更新しようとしています。InBasket$cart$catalog

まず最初に:

これらの増分ループを取り除きます。PHP では、はるかに読みやすいforeachfor iterationを使用するのが一般的です。

foreach ($catalog as &$catalog_item) {
  foreach($cart as $cart_item) {
    if ($catalog_item['ProductID'] == $cart_item['ProdID']) {
       // The InBasket key is part of the catalog, not the cart!
       $catalog_item['InBasket'] = 1;
    }
  }
}
于 2012-07-31T13:07:14.083 に答える
2

あなたの例では、両方のテーブルの製品 ID はProdID; 2 つの undefined/void 配列要素をチェックしています (これは等しくなります)。

if ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )
于 2012-07-31T13:05:56.093 に答える
0

配列の例の構文が間違っています:

$catalog[] = array('whatever');

これは、別の配列に含まれるものが何であれ、その配列を意味します。

次の例を参照してください。http://codepad.org/OMbnEEjA 次に、違いがわかります。

于 2012-07-31T13:09:34.077 に答える
0

いくつかの問題:

  1. 間違ったキー名を使用しています:

    If ($catalog[$x]['ProductID'] == $cart[$y]['ProductID'] )
    

次のように変更します。

    If ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )
  1. あなたがやっている2番目のループで:

    $cart[$x]['InBasket'] = 1;
    

    しかし、質問でカタログを更新したいと述べたので、次のようにする必要があります。

    $catalog[$x]['InBasket'] = 1;
    

ループには @jicd によって提案された方法を使用する必要があります。これははるかに簡単です。

使用方法の詳細については、こちらをご覧くださいforeach

于 2012-07-31T13:11:40.613 に答える