1

我来自VB;使用权; SQL Server 背景最近介绍给 WAMP。我有一个问题,几个星期以来我都无法解决,我想我已经访问了网络上的每个论坛(包括这里),但都没有成功。

我有两个从 MySQL 记录集中填充的数组,一个用于站点购物车,另一个用于站点部门(目录),请参阅下面对填充数组的手动解释。

$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”,表示该商品已经在客户购物车中,然后我可以在屏幕上显示(客户只能购买任何商品之一)。

有五个不同的部门(目录)将包含多达 10 种产品,购物车将包含四件物品(如果我幸运的话)

我尝试了一些循环,但它们似乎不起作用。

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 迭代,它更具可读性:

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 个未定义/无效的数组元素(它们将相等)。

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

几个问题:

  1. 您使用了错误的键名:

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

将其更改为:

    If ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )
  1. 在你正在做的第二个循环中:

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

    但您在问题中声明您想更新目录,所以它应该是:

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

您应该使用@jicd 建议的方法进行循环,它更容易。

在这里查看有关如何使用的更多信息foreach

于 2012-07-31T13:11:40.613 回答
0

您的数组示例的语法是错误的:

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

这意味着包含任何内容的数组都将包含在另一个数组中。

请参阅此示例:http ://codepad.org/OMbnEEjA 然后您将看到不同之处。

于 2012-07-31T13:09:34.077 回答