Re: Как отсортировать данные турнирной таблицы(условия экзот В элементе game_over записано какой игрок проиграл, а не выиграл (это следует из условий автора). В твоём варианте получается, что в 4-м раунде играют два проигравших. На такую нестандартную ситуацию скрипт нестандартно реагирует Добавлено спустя 30 секунд: Re: Как отсортировать данные турнирной таблицы(условия экзотичес
Re: Как отсортировать данные турнирной таблицы(условия экзот Ну да. Не правильно я ввёл. Ну ведь круто же.)
Re: Как отсортировать данные турнирной таблицы(условия экзот Спасибо sobachnik, вы классно решили задачку, такой алгоритм мне даже в голову не пришёл, было конечно желание использовать рекурсию и in_array(), но как всё это собрать в алгоритм - не придумал. Вот моё решение, оно, конечно, не такое изящное, как у вас, (плюс к этим функциям есть ещё вывод, его выкладывать не стал) Код (Text): public function TablePartitionByStage($table){ $tableByStage = array(); $i=0; for($k=1; $k<count($table); $k++){ if(isset($table[$k-1]) && $table[$k]['stage'] == $table[$k-1]['stage']){ if($k===1) $tableByStage[$i][]=$table[$k-1]; $tableByStage[$i][]=$table[$k]; }else{ $i++; $tableByStage[$i][]=$table[$k]; } } return $tableByStage; } public function StageTableSort($stages1, $stages2, $stages3=false){ $stage1Sorted = array(); $stage2Sorted = $stages2; if($stages3!=false){ $stage2Sorted = array(); foreach($stages3 as $stage3){ foreach($stages2 as $stage2){ if( ($stage2['id_first_opponent']==$stage3['id_first_opponent']) || ($stage2['id_first_opponent']==$stage3['id_second_opponent']) || ($stage2['id_second_opponent']==$stage3['id_first_opponent']) || ($stage2['id_second_opponent']==$stage3['id_second_opponent']) ) { $stage2Sorted[]=$stage2; } } } } foreach($stage2Sorted as $stage2){ foreach($stages1 as $stage1){ if( ($stage1['id_first_opponent']==$stage2['id_first_opponent']) || ($stage1['id_first_opponent']==$stage2['id_second_opponent']) || ($stage1['id_second_opponent']==$stage2['id_first_opponent']) || ($stage1['id_second_opponent']==$stage2['id_second_opponent']) ) { $stage1Sorted[]=$stage1; } } } return ($stages3 != false)?array_merge($stage1Sorted, $stage2Sorted, $stages3):array_merge($stage1Sorted, $stage2Sorted); } Сначала функцией TablePartitionByStage() исходный массив разбивается в массив с подмассивы по уровням, потом полученный массив частями(подмассив 1 уровня, подмассив 2 уровня, подмассив 3 уровня) передаётся в StageTableSort().