在多维数组中填充值(PHP)

3
我有一个小问题。我正在处理一个小包裹/产品列表。 如果你在查看一个包裹,我的网站应该向你展示哪些产品在里面。 如果一个产品在里面出现了多次,数组应该被删除,并且剩余数组的值应该+1(每个被删除的数组)。
这是我的代码:
// $products_in_package has all products in it
// First of all, the products come from a db and don't have a count
// So i first give them a count of 1

foreach ($products_in_package as $product => $value) {
    $products_in_package[$product]['count'] = intval(1);
}

foreach ($products_in_package as $product) {
    $id_to_find = intval($product['ID']);
    $product_count = intval($product['count']);
    $found_id = 0;
    // Now I try to find any ident products
    // If found and over 1 time (beacouse he finds the first too of course)
    // Then delete this array and count up the products count

    for ($i=0; $i <= count($products_in_package); $i++) {
        if(intval($products_in_package[$i]['ID']) === $id_to_find){
            $found_id++;

            if($found_id > 1){
                $product_count = $product_count + 1;
                $product['count'] = $product_count;
                unset($products_in_package[$i]);
                array_merge($products_in_package);

                while($i > $products_in_package){
                    $i = 0;
                }
            }
        }
    }
}

我得到了正确的多维数组,但计数仍为1。 代码有什么问题吗?
每次我尝试记录代码时,我都会得到正确的整数。(不,我已经尝试过删除缓存) 但如果我在循环之外记录数组,我始终会得到计数为1。
1个回答

3

$product是数组元素的一个副本,所以当您执行$product['count'] = $product_count时,您是在赋值给副本,而不是原始数组。

您可以通过在foreach中使用引用来解决此问题:

foreach ($products_in_package as &$product) {

哦.. 哇.. 我不知道答案如此简单。我不知道我正在分配给一个副本.. 为什么呢?我是一名新的网页设计学生,我从未听说过这个 :( - Da Flo
1
除了对象之外,PHP 中的所有赋值都会进行复制。 - Barmar
哦。。。非常感谢 :) 我尝试了几个小时,什么都没发生 - Da Flo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接