Здравствуйте! Задача в следующем есть многомерный массив(в среднем длина его 1000) типа PHP: $mas[]=array('name'=>'xxx','coda'=>'aaa','codb'=>'bbb','num'=>'4','type'=>'a'); $mas[]=array('name'=>'xxx','coda'=>'aaa','codb'=>'bbb','num'=>'6','type'=>'c'); $mas[]=array('name'=>'yyy','coda'=>'a','codb'=>'b','num'=>'7','type'=>'c'); Необходимо сгруппировать его если coda и codb равны, получить сумму по num и строку type-num Конечный результат массива PHP: $mas_group=.. (0) => Array ( (name) => 'xxx', (coda) => 'aaa', (codb) => 'bbb', (sum) => '10', (group_type) => Array ( (0) => Array ( (0) => 'a-4' (1) => 'c-6' ) ), ), (1) => Array ( (name) => 'yyy', (coda) => 'a', (codb) => 'b', (sum) => '7', (group_type) => Array ( (0) => Array ( (0) => 'c-7' ) ), ) Есть ли готовые функции для этого? или лучше все заливать в БД и запросом( используя SUM, GROUP_CONCAT) заполнять в массив? В общем какие решения есть по такой группировки, пожалуйста помогите.
А пример можно простой группировки по двум значениям и суммировать одинаковые, в гуле подобное не могу найти..
@osi322 в sql или php array? Если второе, то просто в цикле создаёшь новый массив с нужной структурой. Есть конечно и разные классы, которые помогают преобразовать массивы, но они не универсальны. http://www.yiiframework.com/doc-2.0/guide-helper-array.html
По второму(yii еще не изучал), в чем здесь ошибка почему он затирает повторяющиеся? Что я не так понимаю.. PHP: $masgroup=array(); foreach ($mas as $v) { $a=0; $k; foreach ($masgroup as $key => $vv) { if ($v['cada']==$vv['cada'] and $v['cadb']==$vv['cadb']) { $a=1; $k=$key; //список повторяющих echo $key.$vv['name']."<br>"; } } //нет совпадений if ($a==0) { $masgroup[]=$v; } //если совпало if ($a==1) { $masgroup[$k]['kol']=$masgroup[$k]['kol']+$v['kol']; } }
Вариант, как вариант. По поводу yii - а не обязательно весь изучать, можно array helper выудить оттуда и использовать. Он ни от каких других классов не зависит. Я одно время так с кохановским хелпером делал.