Всем привет, я пока новичек, вот уже третий день пытаюсь сделать правильное условие для отбора данных в массив. Все шансы проваливаются, что только не делал. Помогите. Нужно правильно составить условие. Если name и link совпадают, и у них разные value, то занести в массив где value нужно прибавить, а тот value который мы взяли больше не учтывать. Если же name и link совпадают, и у них одинаковый value, то не брать эту строку, а лучше вообще убрать. Дальше, если name или link разные, то так же записать в массив. id name link value 1 box1 XPOL 1 2 box2 XERR 2 3 box1 XPOL 3 4 box2 POLL 1 5 box3 LKOO 2 6 box1 XPOL 1 Из таблицы выше должно получиться: id name link value 1 box1 XPOL 4 2 box2 XERR 2 4 box2 POLL 1 5 box3 LKOO 2 Я делал так. Два цикла, где все проверяется. PHP: $Array; //Тут массив с данными из базы. $Viborka = []; //Тут массив куда будем все записывать $m = 0; //Счетчик для массива for($i=1;$i<=count($specificationPipe);$i++){ for($l=1;$l<=count($specificationPipe);$l++){ if($Array[$i-1]['name'] == $Array[$l-1]['name'] && $Array[$i-1]['link'] == $Array[$l-1]['link'] && $Array[$i-1]['value']!==$Array[$l-1]['value']){ $Viborka[$m]['name'] = $Array[$i-1]['name']; $Viborka[$m]['link'] = $Array[$i-1]['link']; $Viborka[$m]['value'] = $Array[$i-1]['value'] + $Array[$l-1]['value']; } } //То что выше все норм прибавляет. Но дальше начинается кошмар. Как только не далал, ошибка в том что после отбора в массив, я не делаю проверку на то чтобы, больше отобранный элемент не брался. Спасибо всем кто откликнется.
@proVas, БД вам не помойка, вы наверно удивитесь, но база данных нужна не для хранения информации (!). Она нужна для хранения и обработки информации. 99% у вас неправильная архитектура БД, поэтому у вас все черти с переломанными ногами. Самое грустное, что мало кто решается сделать шаг назад и исправить ранее допущенные ошибки. Вместо этого тратят кучу времени на "костыли", не замечая как затягивают петлю на собственной шее. А потом называют БД "узким местом". (конец гневной тирады) @proVas, БД будем нормализовать или как?
@Valick, тут скорее вопрос в использовании группировки и агрегатных функций в запросе. Вполне возможно, что в таблице хранится не только `value`, но и ещё пачка данных (timestamp, например). @proVas, ну а для этого тяжёлого случая есть вариант: Спойлер PHP: $arr = [ ['name' => 'box1', 'link' => 'XPOL', 'value' => '1'], ['name' => 'box2', 'link' => 'XERR', 'value' => '2'], ['name' => 'box1', 'link' => 'XPOL', 'value' => '3'], ['name' => 'box2', 'link' => 'XERR', 'value' => '1'], ['name' => 'box3', 'link' => 'LKOO', 'value' => '2'], ['name' => 'box1', 'link' => 'XPOL', 'value' => '1'], ]; $n = count($arr); foreach($arr as $key => $value) { if(array_key_exists($key, $arr)) { for($i = $key + 1; $i < $n; $i++) { if(!array_key_exists($i, $arr)) { continue; } if($arr[$key]['name'] !== $arr[$i]['name'] || $arr[$key]['link'] !== $arr[$i]['link']) { continue; } $arr[$key]['value'] += $arr[$i]['value']; unset($arr[$i]); } } } var_dump($arr);