1

I'm from a VB; Access; SQL Server background recently introduced to WAMP. I have a problem which I have not been able to solve for a few weeks now, I think I have visited every forum on the web (including here) without success.

I have two arrays filled from MySQL recordsets, one for the site Cart and the other for one of the site departments (catalogs) see a manual interpretation of the filled arrays below.

$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'),
);

What I need to do is loop through the catalog array each time a new catalog is chosen, comparing the ProdID of each row in the cart against the ProdID of each row of the catalog, when a match is found I would like to update the catalog 'InBasket' value for that row only to '1' to indicate that the item is already in the customers cart which I can then show on screen (The customer is only allowed to purchase one of any item).

There are five different departments (catalogs) which will contain up to 10 products the cart will contain say four items (If I'm lucky)

I have tried some loops but they don't seem to work.

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

I hpoe that my arrays are correct, but, the loops seem to update 'InBasket' regardless.

Any ideas would be appreciated.

2
  • You should be using the foreach() command, rather than the for statement, which is typical of VB. Commented Jul 31, 2012 at 13:07
  • Should it not be $catalog[$x]["inBasket"] = 1 ? Commented Jul 31, 2012 at 13:08

4 Answers 4

4

Your $cart has an array key called ProdID, but you are attempting to use ProductID which doesn't exist. Then, you are attempting to update the InBasket key of the $cart subarrays, when really, it is a member of the $catalog array.

First thing's first:

Get rid of those incremental loops. In PHP, we much more typically use foreach for iteration, which is a lot more readable:

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;
    }
  }
}
Sign up to request clarification or add additional context in comments.

4 Comments

Thanks for your answer, much appreciated. When I looked over the question later I realised the ProdID - ProductID (Human error), however, the foreach information was what I was looking for.
Since my last reply I have tried your code against my arrays and the InBasket 'field' is not updated. Did you run your own code ?
@johncron I just noticed you have an extra [] on your array definitions which make them 3 levels instead of 2. Change them from $catalog[] = array(...) to $catalog = array(...).
@johncron Also, you need an array reference. See the & added in the outer foreach loop above... I tested and it works -- products 2 & 8 are updated correctly.
2

In your example, the Product ID in both tables is ProdID; you're checking 2 undefined/void array elements (which will be equal).

if ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )

Comments

0

The syntax of your array example is wrong:

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

This means that the array with whatever will included into another array.

See this example: http://codepad.org/OMbnEEjA Then you'll see the difference.

1 Comment

Thanks for this info, however, the link produced an internal server error.
0

Several problems:

  1. you are using the wrong key name:

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

change it to:

    If ($catalog[$x]['ProdID'] == $cart[$y]['ProdID'] )
  1. in the second loop you are doing:

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

    but you stated in the question you would like to update the catalog, so it should be:

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

You should use the method suggested by @jicd for looping, it is much easier.

look here for more info on how to use foreach.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.