我来自VB;访问;最近向WAMP引入了SQL Server背景。我有一个问题,我现在几个星期都无法解决,我想我已经访问过网络上的每个论坛(包括这里)都没有成功。
我有两个从MySQL记录集中填充的数组,一个用于站点Cart,另一个用于站点部门(目录),请参阅下面填充数组的手动解释。
$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'。
任何想法都会受到赞赏。
答案 0 :(得分:4)
您的$cart
有一个名为ProdID
的数组键,但您正在尝试使用不存在的ProductID
。然后,您正在尝试更新InBasket
子阵列的$cart
键,实际上,它是$catalog
数组的成员。
摆脱那些增量循环。在PHP中,我们通常使用foreach
for 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;
}
}
}
答案 1 :(得分:2)
在您的示例中,两个表中的产品ID均为ProdID
;你正在检查2个undefined / void数组元素(它们是相同的)。
if ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )
答案 2 :(得分:0)
数组示例的语法错误:
$catalog[] = array('whatever');
这意味着该数组将包含在另一个数组中。
请参阅此示例:http://codepad.org/OMbnEEjA 然后你会看到差异。
答案 3 :(得分:0)
几个问题:
您使用了错误的密钥名称:
If ($catalog[$x]['ProductID'] == $cart[$y]['ProductID'] )
将其更改为:
If ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )
:
$cart[$x]['InBasket'] = 1;
但您在问题中表示要更新目录,因此它应该是:
$catalog[$x]['InBasket'] = 1;
您应该使用@jicd建议的方法进行循环,这样更容易。
查看here了解有关如何使用foreach
的更多信息。