2016-01-01 4 views
3

У меня небольшая проблема. Я работаю над небольшим пакетом/списком продуктов. Если вы смотрите Пакет, мой сайт должен показать вам, какие продукты находятся там. Если продукт имеет более одного раза в нем, массив должен быть удален, а значение оставшегося массива должно быть + 1 (каждый удаленный массив).Заполнить значения в многомерном массиве (PHP)

Так вот мой код:

// $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. Что случилось с кодом?

Каждый раз, когда я пытаюсь записать код, я получаю правильное целое число. (Нет, я уже пытался удалить chache) Но если я вхожу массив из петель, я всегда на счетчик 1.

ответ

3
$product

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

Вы можете исправить это с помощью ссылки в foreach:

foreach ($products_in_package as &$product) { 
+0

Ой .. ничего себе .. Я не знал, что ответ так легко. Я не знал, что я приписываю копию. Почему? Я новичок в веб-дизайне, и я никогда не слышал об этом :( –

+1

За исключением объектов, все задания в PHP делают копии. – Barmar

+0

Ох .. и большое спасибо :) Я пробовал часы, и ничего не произошло –

Смежные вопросы