У меня небольшая проблема. Я работаю над небольшим списком пакетов / продуктов. Если вы смотрите Пакет, мой веб-сайт должен показать вам, какие продукты там есть. Если продукт присутствует в нем более одного раза, массив следует удалить, а значение оставшегося массива должно быть + 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.

Da Flo

Ответов: 1

Ответы (1)

$ product - это копия элемента массива, поэтому, когда вы выполняете $ product ['count'] = $ product_count, вы назначаете копию, а не оригинал массив.

Это можно исправить, используя ссылку в foreach:

foreach ($products_in_package as &$product) {

2022 WebDevInsider