我需要将项添加到数组,而不是替换它们

时间:2015-05-24 19:16:37

标签: php arrays session save cart

我有一个小脚本系统。它取代了数组,但我需要它来添加到数组中。这就是我所拥有的:

$_SESSION['cart']=array(); // Declaring session array
array_push($_SESSION['cart'],'item1'); // Item added to cart

如果在此之后我提交:

$_SESSION['cart']=array(); // Declaring session array
array_push($_SESSION['cart'],'item2'); // Item added to cart

它将包含数组中的item2而不是item1和item2 我怎么能这样做呢?

所以我稍微更改了我的代码,而不是当我将下面的代码推到两次时它会覆盖该项目。如何让它添加另一个呢?

array_push($_SESSION['cart']['itemName'] = 13.99);

5 个答案:

答案 0 :(得分:2)

您似乎正在第二组代码上重新创建数组,这意味着您将删除数组中已有的所有内容。对于第二组代码,您是否仅在没有array_push的情况下尝试$_SESSION['cart']=array();?如果没有尝试摆脱第一行,看看它是否有效。

答案 1 :(得分:2)

使用此语法追加:

$_SESSION['cart'][] = 'item1';
$_SESSION['cart'][] = 'item2';

编辑:

// declare only if needed
if (!array_key_exists('cart', $_SESSION)) $_SESSION['cart'] = array();

// when adding an item at any future time once $_SESSION['cart'] exists:
$_SESSION['cart'][] = array(
     'itemName' => 'my item',
     'price' => 13.99
);

答案 2 :(得分:0)

U宣布了2次$_SESSION['cart']。删除第二个声明,你应该很高兴。

编辑:

你不要使用array_push的正确语法。

PHP.net : array_push()

如果我理解正确 - 键的索引(数字,因为array_push)困扰你。

U可以使用此代码绕过:

$_SESSION['cart'] = array();
$_SESSION['cart']['itemName'] = 12.50;

$_SESSION['cart'] = $_SESSION['cart'] + array("blabla" => 13.99);

print "<pre>";
print_r($_SESSION);
print "</pre>";

结果:

Array
(
[cart] => Array
    (
        [itemName] => 12.5
        [blabla] => 13.99
    )

)

最后编辑:(!?!)

 function set_item_price($itemName, $itemPrice)
{
    if(!isset($_SESSION['cart'][$itemName]['itemPrice']))
        $_SESSION['cart'][$itemName]['itemPrice'] = $itemPrice;

    else
        echo "Item Already exists \n <br>";
}

function add_to_cart($itemName, $quantity)
{
    if(!isset($_SESSION['cart'][$itemName]['quantity']))
        $_SESSION['cart'][$itemName]['quantity'] = $quantity;

    else
        $_SESSION['cart'][$itemName]['quantity'] += $quantity;
}




// Adding item1 - price 12.50
set_item_price("item1", 12.50);

// Adding item1 - quantity - 2 & 3
// OutPut will be 5
add_to_cart("item1", 2);
add_to_cart("item1", 3);

// Adding item3 - price 15.70
set_item_price("item3", 15.70);

// Adding item1 - quantity - 5
add_to_cart("item3", 5);


print "<pre>";
print_r($_SESSION);
print "</pre>";


?>

结果:

Array
(
[cart] => Array
    (
        [item1] => Array
            (
                [itemPrice] => 12.5
                [quantity] => 5
            )

        [item3] => Array
            (
                [itemPrice] => 15.7
                [quantity] => 5
            )

    )

)

否则请检查此主题:

Stackoverflow : how-to-push-both-value-and-key-into-array-php

答案 3 :(得分:0)

每次调用此行:

$_SESSION['cart']=array();

您正在清理购物车会话。如果你将它包装在if语句中以检查数组是否已经被实例化,那么你每次都不会清除它,你应该能够按预期添加它:

if (!isset($_SESSION['cart'])) {
    $_SESSION['cart']=array();
}

答案 4 :(得分:0)

在添加数组之前,您正在清空数组,并声明$ _SESSION [&#39; cart&#39;]等于新的空数组