За последние 24 часа нас посетили 51125 программистов и 1758 роботов. Сейчас ищут 1816 программистов ...

сортировка многомерного массива array_multisort() в цикле

Тема в разделе "Прочие вопросы по PHP", создана пользователем avel08, 13 окт 2015.

  1. avel08

    avel08 Новичок

    С нами с:
    13 окт 2015
    Сообщения:
    4
    Симпатии:
    0
    код большой - показываю только не работающую часть

    Код (PHP):
    1. foreach ($tables as $val){
    2.  
    3.     $res_1 = mysql_query("SELECT * FROM teams WHERE $sql_teams ORDER BY teams_name ASC ");
    4.     $row_1 = mysql_fetch_array($res_1);
    5.     $teams = array();do{$teams[] = $row_1;}while($row_1 = mysql_fetch_array($res_1));
    6.  
    7.     foreach ($teams as $key => $row) {
    8.         $o[$key]    = $row['o'];
    9.         $sh_z[$key] = $row['sh_z'];
    10.         $sh_p[$key] = $row['sh_p'];
    11.     }
    12.  
    13.     array_multisort($o, SORT_DESC, $sh_z, SORT_DESC, $sh_p, SORT_ASC, $teams);
    14.  
    15. } 
    получается что array_multisort() сортирует один и тот-же массив с разными значениями, если следующий массив больше предыдущего то проблем нет, а если меньше выскакивает ошибка Warning: array_multisort(): Array sizes are inconsistent

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    Re: сортировка многомерного массива array_multisort() в цикл

    а сразу в БД нельзя отсортировать как нужно?? :)
     
  3. avel08

    avel08 Новичок

    С нами с:
    13 окт 2015
    Сообщения:
    4
    Симпатии:
    0
    Re: сортировка многомерного массива array_multisort() в цикл

    нет, значения по которым сортируется не хранятся в бд, они высчитываются и добавляются в процессе - это подсчет очков команд в турнирных таблицах
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: сортировка многомерного массива array_multisort() в цикл

    mysql тоже может считать и делать арифметические операции и многое другое, добавь данные к запросу
     
  5. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    Re: сортировка многомерного массива array_multisort() в цикл

    и зачем в цикл пихать запрос
    Код (Text):
    1. $res_1 = mysql_query("SELECT * FROM teams WHERE $sql_teams ORDER BY teams_name ASC ");
    который с ним не связан, что бы сайт грузить долго, или всё иначе?? :)
     
  6. avel08

    avel08 Новичок

    С нами с:
    13 окт 2015
    Сообщения:
    4
    Симпатии:
    0
    Re: сортировка многомерного массива array_multisort() в цикл

    там сложный процесс подсчета, я даже не уверен что вообще смогу составить такой запрос, тут вопрос в том как работает array_multisort, и что ему не нравится, и что можно с ним сделать

    каждую итерацию выбираются разные строки, условия выбора высчитывается выше
     
  7. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    Re: сортировка многомерного массива array_multisort() в цикл

    Тогда бы и находился этот запрос там выше. А в этом цикле же он не связан ?? :)
     
  8. avel08

    avel08 Новичок

    С нами с:
    13 окт 2015
    Сообщения:
    4
    Симпатии:
    0
    можно выбрать 1 раз все строки и сортировать в цикле с помощью array_filter(), но там неизвестное заранее количество условий которые формируются другой таблицей, код получится большой и более сложный, цикл проходит не более 10 раз поэтому нагрузка в данном случае не большая

    Добавлено спустя 7 минут 45 секунд:
    Re: сортировка многомерного массива array_multisort() в цикле
    Нашел проблему, каждую итерацию $teams обновлялся а $o,  $sh_z, $sh_p - дописывались в созданный массив, добавляем unset() и всё работает:

    Код (PHP):
    1. foreach ($tables as $val){
    2.  
    3.     $res_1 = mysql_query("SELECT * FROM teams WHERE $sql_teams ORDER BY teams_name ASC ");
    4.     $row_1 = mysql_fetch_array($res_1);
    5.     $teams = array();do{$teams[] = $row_1;}while($row_1 = mysql_fetch_array($res_1));
    6.     
    7.     unset($o);
    8.     unset($sh_z);
    9.     unset($sh_p);
    10.  
    11.     foreach ($teams as $key => $row) {
    12.         $o[$key]    = $row['o'];
    13.         $sh_z[$key] = $row['sh_z'];
    14.         $sh_p[$key] = $row['sh_p'];
    15.     }
    16.  
    17.     array_multisort($o, SORT_DESC, $sh_z, SORT_DESC, $sh_p, SORT_ASC, $teams);
    18.  
    19. } 
     
  9. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    Re: сортировка многомерного массива array_multisort() в цикл

    прекрасно, поднимаю за тебя бакал красного вина ((:)