我来自VB;通道SQL Server背景最近引入WAMP。我有一个问题,我已经几个星期没能解决了,我想我已经访问了网络上的每个论坛(包括这里),但都没有成功。
我有两个从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"。
任何想法都将不胜感激。
您的$cart
有一个名为ProdID
的数组键,但您正试图使用不存在的ProductID
。然后,您正在尝试更新$cart
子数组的InBasket
密钥,而实际上它是$catalog
数组的成员。
首先:
去掉那些递增循环。在PHP中,我们通常使用foreach
进行迭代,它可读性更强:
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;
}
}
}
在您的示例中,两个表中的产品ID都是ProdID
;您正在检查2个未定义/无效的数组元素(它们将相等)。
if ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )
数组示例的语法错误:
$catalog[] = array('whatever');
这意味着包含任意内容的数组将被包含到另一个数组中。
请参见此示例:http://codepad.org/OMbnEEjA然后你就会看到区别。
几个问题:
-
您使用了错误的密钥名称:
If ($catalog[$x]['ProductID'] == $cart[$y]['ProductID'] )
将其更改为:
If ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )
在你正在做的第二个循环中:
$cart[$x]['InBasket'] = 1;
但是你在问题中说你想更新目录,所以应该是:
$catalog[$x]['InBasket'] = 1;
你应该使用@jicd建议的方法进行循环,这会容易得多。
查看此处了解有关如何使用foreach
的更多信息。