从PHP函数更改全局2d数组?

时间:2015-04-23 19:36:22

标签: php arrays function

$q = $_POST['q'];

$inCart = isset($_COOKIE['cart']) ? unserialize($_COOKIE['cart']) : array();

function alreadyInCart() {

    global $inCart, $good, $q;

    foreach ($inCart as $inCart1) {

        if ($inCart1[0] == $good->id) { // if this good already in cart

            $inCart1[1] = $inCart1[1] + $q; // write sum of q's to existing array

            return true; // and return true

        }

    }

    return false; // return false if not

}


if (alreadyInCart() == false) { // if good added to cart for the first time

    $inCart[] = array($good->id, $q); // add array at the end of array

}

您好。所以我的问题是我正在运行一个函数来查明$good->id是否已经在2d $inCart数组中。

$inCart看起来像这样:

Array
(
    [0] => Array
        (
            [0] => 6
            [1] => 1
        )

    [1] => Array
        (
            [0] => 5
            [1] => 1
        )

)

其中[0]是一个好的ID,[1]是购物车中这个商品的数量。

所以我跟踪该函数实际上做了我想要的并按预期返回true / false,但看起来它只在它自己内部。因为如果我将print_r($inCart1[1])置于函数内部,它会加起来并按预期输出总和。但是当我在代码末尾(函数外部)输出数组时,数量不会累加,只是保持在函数运行之前的状态。

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

好的,如果有人遇到同样的问题:找到解决方案。

或者我应该说发现了一个错误?

问题在于foreach ($inCart as $inCart1)。必须替换为foreach ($inCart as &$inCart1)才能更改循环中的数组值。另一方面,它只是读取值,位不能改变它们。