Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Рекурсивно присвоить сумму, для кол-ва товаров в категориях
jokpok  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 42421
На форуме: 10 месяцев, 17 дней
Карма:




Всем доброй ночи!

Вроде бы простая задача, но спустя тяжелый рабочий день, не могу понять (голова не варит, а задачу закрыть надо) что не так в данном коде:

function setCounts($el) {
$count = 0;
foreach($el as $k => $v) {
if(isset($v['categories'])) {
$v['product_count'] += setCounts($v['categories']);
}
$count += $v['product_count'];
print_r($v);
}

return $count;
}


Должно происходить вот что:
Есть дерево категорий вида


$tree = [
"name" => "Cat1",
"categories" => [ "name" => "subCat1", "categories" => [...] ]
]



Некоторым подкатегориям n-ого уровня вложенности присвоен параметр product_count (количество товаров в данной категории). Необходимо всем родительским категориям присвоить такой же параметр, равный сумме этих параметров в дочерних категориях, естественно рекурсивно, например должно получится вот что:

$need_tree = [
"name" => "Cat1",
"product_count" => 15, //получен из суммы дочерних категорий
"categories" => [
"name" => "subCat1",
"product_count" => 15, //получен из суммы дочерних категорий
"categories" => [
"name" => "subSubCat1",
"product_count" => 5 //присвоен изначально
],
[

"name" => "subSubCat2",
"product_count" => 10 //присвоен изначально
],
]
]



Уверен, что в моем коде есть какой-то глупый недочет, но вот уже никак не соображу...
Надеюсь на вашу помощь.

Спасибо за внимание! :)

Это сообщение отредактировал jokpok - 24.01.2016 - 03:42
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 2 месяца, 5 дней
Карма: 3




Наверное, надо $el передавать по ссылке, а то ведь исходный массив не меняется.
И вот тут
$v['product_count'] += setCounts($v['categories']);

правильно будет:
$el[$k]['product_count'] += setCounts($v['categories']);

а то опять-таки исходный массив не меняется.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 7 дней
Карма: 40




jokpok, если ты считаешь все дерево, почему просто не написать SQL запрос для выборки из БД по количеству записей для всех нод этого дерева?


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса