Work on the fundamental structure of the cart. I think what you want is for
the $items array to contain a list of the items for which anything has been
ordered. You want the quantity of each unique combination of product id and
option, so ...


function add($productid, $qty, $option)
{       /* add an item to the shopping cart and update the total price */
        $key = "$productid:: $option";
if (isset($items[$key]))
{               $items[$key]["quantity"] += $qty;
} else
{               $items[$key] = array("productid"=>$productid,
"option"=>$option, "quantity"=>$qty)
}
/* echo "Submitted : ".$productid." ".$option." ".$qty; */
}

If I've misunderstood what you're trying to do, let me know

Tim Ward

        ----------
        From:  Jamie Smith [SMTP:[EMAIL PROTECTED]]
        Sent:  23 September 2001 06:33
        To:  PHP
        Subject:  Multiple Arrays in OOP

        hi I'm hoping that someone here can help me I'm totally new to
object oriented 
        stuff and might be trying to do this totally ass backwards.
        Having said that this also involves multidimensional arrays and I'm
not to bright with these either . :)

        I have looked on the web and FAQ's and manuals for help  but havenot
found anything that quite 
        covers this in this ..so I hope It's not so obvious that noone else
has ever asked this.
        Thanks in advance.

        What I am trying to make is just a small shopping type application.
My idea is 
        for an Item code , an option for the item and the number wanted to
be sent to a Cart Class
        and stored as an multi dimensional array that has structure like
this :

        ($productid, ($option => $qty))  
        so that $option is a string index of the "second" array

        or visually like this I think :
        |          Code1        ||                Code 2               ||
        | Option1 | Option2 || Option1 | Option2 | Option3 ||
        |    QTY   |    QTY   ||    QTY   |    QTY  |   QTY    ||

        What I am having problems with is setting the qty value correctly
and updating it
        Supposedly if you just keep hitting the update button then the qty
should keep incrementing
        but on the first run (for each code entered) it is zeroed ! and not
1 as is on the form .. after the first time all qty 
        for options are set correctly, but I cannot figure out how to
'reach' into the array and update 
        or even overwrite the values I am setting (overwriting is what I was
expecting for the code below)


        Thanks again 
        Jamie Smith


        CODE follows 
        <?//This is self contained code just to show what I'm trying.

        /* Start up the sessions,useing one array called MYSESSION to store
all persistent variables.*/
        /* In this example just my Cart info is stored but other customer
preferences can be carried here later   */
        session_start();
        session_register("MYSESSION");

        if (!isset($MYSESSION)) { /* initialize the MYSESSION variable */
         $MYSESSION = array();
        }

        /* initialize the CART objct if necessary */
        if (! isset($MYSESSION["cart"])) {
         $MYSESSION["cart"] = new Cart;
        }

        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        switch ($action) {
          case "clearall" :/*resets the array to null*/
           $MYSESSION["cart"]->init();
           header("Location: $HTTP_REFERER");
          break;
          case "add" :
         $MYSESSION["cart"]->add($item_code, $form_qty, $option);
          default:
        ?>
        <html>
        <body bgcolor="#FFFFFF">
        <table align = "Center" width="300"><tr><td>
        <form name="form" method="POST" >
          CODE : <input type="text" name="item_code" value="ABC"><br>
          Option:
            <input type="radio" name="option" value="A2" CHECKED>A2
            <input type="radio" name="option" value="A3"> A3
            <input type="radio" name="option" value="A4"> A4<br>
          Qty to add : <input type="text" name="form_qty" value="1">
          <input type="hidden" name="action" value="add">
            <input type="submit" name="Submit" value="Update">
        </form>
        <p><p><p>
        <?
        echo"Cart Contents :<br>\n<div align=\"right\"><a
href=\"$PHP_SELF?action=clearall\">Clear All</a></div>";
        $itemarray = $MYSESSION["cart"]->items;
        while (list ($code) = each ($itemarray)){
         echo "<hr>\nCode : $code<br>\n<blockquote>\n";
         while(list($option,$qty) = each ($itemarray["$code"])){
          echo "Option = $option | QTY = $qty<br>\n";
         }
         echo"</blockquote>";
        }
        ?></td></tr></table>
        </body>
        </html>
        <?
        }

        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        function setdefault(&$var, $default="")
        {
        /* if $var is undefined, set it to $default.  otherwise leave it
alone */
         if (! isset($var)) {
          $var = $default;
         }
        }

        class Cart {
         var $items;  /* array of items ($productid, ($option => $qty))*/

         function Cart() {
         /* object constructor */
          $this->init();
         }

         function init() {
         /* this function is called to initialize (and reset) the cart */
          $this->items = array();
         }

         function add(&$productid, $qty, $option) {
         /* add an item to the shopping cart and update the total price */
          if (isset($productid)) {
           if(!($option))$option=0;/*not all products will have multiple
options and may be passed as $productid and $qty*/
           $productinfoarray = array ($option => 0);
           setdefault($this->items[$productid],$productinfoarray);
           /* echo "Submitted : ".$productid." ".$option." ".$qty; */
           $this->items[$productid] += array($option => $qty);
          }
         }
        }
        ?>
        

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to