Re: Array

From: Date: Sat, 24 Oct 2009 17:35:22 +0000
Subject: Re: Array
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-299304@lists.php.net to get a copy of this message
Ron Piggott wrote:
The code I have so far for orders is below. When a product hasn't been added it does what I want it to --- in giving the message "Your shopping cart is empty". When a product is added, but then the user changes their mind I use the following lines of code to remove the selection: UNSET($_SESSION['order'][$reference]['quantity']); UNSET($_SESSION['order'][$reference]); It still leaves the variable $_SESSION['order'] as an array, even if there are no selections in it. The PHP command is_array is useless of weed out when there are no products. What I would like to have happen is if the shopping cart is empty then the message "Your shopping cart is empty" be displayed 100% of the time. How do I achieve this? What changes to my code below need to happen? <?php if ( isset($_SESSION['order']) ) { #customer has begun creating order foreach ($_SESSION['order'] AS $key => $value ) { echo "Product: " . $key . " Quantity: " . $_SESSION['order'][$key]['quantity'] . "<br>\r\n"; } } else { #no products selected echo "<ul class=\"lists\">\r\n"; echo "<li>Your shopping cart is empty</li>\r\n"; echo "</ul>\r\n"; }
Try this <?php ...
if ( isset($_SESSION['order']) &&    # Does it exist
     is_array($_SESSION['order']) && # Is it an array
     count($_SESSION['order']) > 0   # Does it have at least 1 element
    ) {
    #customer has begun creating order
    foreach ($_SESSION['order'] AS $key => $value ) {
        echo "Product: {$key} Quantity: {$_SESSION['order'][$key]['quantity']}<br>\r\n";
    }
} else {
    #no products selected
    echo "<ul class=\"lists\">\r\n";
    echo "<li>Your shopping cart is empty</li>\r\n";
    echo "</ul>\r\n";
} ... ?>
-----Original Message----- From: Martin Scotta <martinscotta@gmail.com> To: ash@ashleysheridan.co.uk Cc: ron.piggott@actsministries.org, PHP General <php-general@lists.php.net> Subject: Re: [PHP] Array Date: Sat, 24 Oct 2009 11:50:14 -0300 On Sat, Oct 24, 2009 at 7:59 AM, Ashley Sheridan <ash@ashleysheridan.co.uk> wrote:
        On Sat, 2009-10-24 at 06:57 -0400, Ron Piggott wrote:
        The following line gives me an error message when there aren't
        any
values in the array --- how do I accommodate this? Warning: Invalid argument supplied for foreach() foreach ($_SESSION['order'] AS $key => $value ) {
                                        Do an isset() on $_SESSION['order'] first to determine if the
        variable
        even exists, then do is_array() to determine if it's an array or
        not
        before trying to iterate it. My guess is that $_SESSION['order']
        isn't
        an array all the time.
                                Thanks,
        Ash
        http://www.ashleysheridan.co.uk
                        
foreach works with array and instances. Unless the class implements Transversable, it's public properties are
used on the loop. foreach($object as $prop => $value ) //php translates the foreach into something like this... foreach(get_object_vars($object) as $prop => $value )
-- Jim Lucas "Some men are born to greatness, some achieve greatness, and some have greatness thrust upon them." Twelfth Night, Act II, Scene V by William Shakespeare

« previous php.general (#299304) next »