За последние 24 часа нас посетили 106082 программиста и 3019 роботов. Сейчас ищут 1340 программистов ...

Сортировка массивов

Тема в разделе "PHP для новичков", создана пользователем bFree, 7 янв 2009.

  1. bFree

    bFree Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Есть несколько массивов с одинаковыми ключами.
    Задача отсортировать первый по убыванию значений, а остальные отсортировать так, чтобы их ключи стали "симметричны" первому массиву не смотря на их значения
    Это надо для постоения турнирной таблицы.
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Киньте хотя бы два примера массивов из 10 элементов, чтобы было на чем практиковаться.

    Попробуйте:
    PHP:
    1.  
    2. <?php
    3. function array_prototype($subject, $prototype) {
    4.  
    5.     $array = Array();
    6.    
    7.     foreach ($subject as $key => $value)
    8.         $array[$key] = $prototype[$key];
    9.  
    10.     return $array;
    11. }
     
  3. bFree

    bFree Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Вот массив $win:
    Код (Text):
    1.  
    2. array(8) {
    3.   [22]=> int(2)
    4.   [17]=> int(1)
    5.   [20]=> int(0)
    6.   [24]=> int(2)
    7.   [23]=> int(3)
    8.   [21]=> int(2)
    9.   [19]=> int(1)
    10.   [18]=> int(0)
    Остальные массивы имеют такиеже ключи, тотже порядок элементов, но другие значения этих элементов.
    Надо отсортировать этот массив по убыванию, чтобы получилось следующее:
    Код (Text):
    1.  
    2. array(8) {
    3.   [23]=> int(3)
    4.   [21]=> int(2)
    5.   [22]=> int(2)
    6.   [24]=> int(2)
    7.   [19]=> int(1)
    8.   [17]=> int(1)
    9.   [18]=> int(0)
    10.   [20]=> int(0)
    Потом надо сделать так, чтобы у остальных массивов элементы выстроились в том же порядке, что и у этого.[/code]
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    :) В итоге пришлось самому набить массив, чтобы проверить.
    Функция работает.

    PHP:
    1. <?php
    2. $arr1 = Array();
    3. $arr2 = Array();
    4. for ($i = 0; $i < 10; $i++) {
    5.     $arr1["arr".$i] = rand(1,15);
    6.     $arr2["arr".$i] = rand(1,15);
    7. }
    8. echo 'arr1:<br>';
    9. print_r($arr1);
    10. echo 'sort arr2:<br>';
    11. print_r($arr2);
    12. asort($arr1);
    13. echo 'sort arr1:<br>';
    14. print_r($arr1);
    15.  
    16. function array_prototype($subject, $prototype) {
    17.  
    18.     $array = Array();
    19.    
    20.     foreach ($subject as $key => $value)
    21.         $array[$key] = $prototype[$key];
    22.  
    23.     return $array;
    24. }
    25.  
    26. $arr2 = array_prototype($arr1, $arr2);
    27. echo 'sort arr2:<br>';
    28. print_r($arr2);
    Код (Text):
    1. arr1:
    2. Array
    3. (
    4.     [arr0] => 10
    5.     [arr1] => 10
    6.     [arr2] => 13
    7.     [arr3] => 10
    8.     [arr4] => 9
    9.     [arr5] => 4
    10.     [arr6] => 15
    11.     [arr7] => 8
    12.     [arr8] => 13
    13.     [arr9] => 13
    14. )
    15.  
    16. arr2:
    17. Array
    18. (
    19.     [arr0] => 4
    20.     [arr1] => 7
    21.     [arr2] => 8
    22.     [arr3] => 7
    23.     [arr4] => 6
    24.     [arr5] => 12
    25.     [arr6] => 10
    26.     [arr7] => 15
    27.     [arr8] => 11
    28.     [arr9] => 4
    29. )
    30.  
    31. sort arr1:
    32. Array
    33. (
    34.     [arr5] => 4
    35.     [arr7] => 8
    36.     [arr4] => 9
    37.     [arr3] => 10
    38.     [arr0] => 10
    39.     [arr1] => 10
    40.     [arr8] => 13
    41.     [arr2] => 13
    42.     [arr9] => 13
    43.     [arr6] => 15
    44. )
    45.  
    46. sort arr2:
    47. Array
    48. (
    49.     [arr5] => 12
    50.     [arr7] => 15
    51.     [arr4] => 6
    52.     [arr3] => 7
    53.     [arr0] => 4
    54.     [arr1] => 7
    55.     [arr8] => 11
    56.     [arr2] => 8
    57.     [arr9] => 4
    58.     [arr6] => 10
    59. )
     
  5. bFree

    bFree Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Kreker, большое спасибо вам!
     
  6. bFree

    bFree Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Возникло небольшое усложнение.
    В результате моих выкрутасов с массивами потребовалось создавать вдумерные массивы. Задача такая же, но теперь надо перемешать каждый вложенный массив. Пытался переделывать функцию Kreker'a. Не вышло.
    Вот пример массива, на который надо "равняться" остальным массивам
    Код (Text):
    1.  
    2. score:
    3. array(2) {
    4.   [1]=>
    5.   array(4) {
    6.     [22]=>   int(6)
    7.     [24]=>   int(4)
    8.     [17]=>   int(3)
    9.     [20]=>   int(1)
    10.   }
    11.   [2]=>
    12.   array(4) {
    13.     [23]=>   int(9)
    14.     [21]=>   int(6)
    15.     [19]=>   int(3)
    16.     [18]=>   int(0)
    17.   }
    18. }
    А вот пример массива, который надо пересортировать:
    Код (Text):
    1.  
    2. win:
    3. array(2) {
    4.   [1]=>
    5.   array(4) {
    6.     [22]=>   int(2)
    7.     [20]=>   int(0)
    8.     [17]=>   int(1)
    9.     [24]=>   int(1)
    10.   }
    11.   [2]=>
    12.   array(4) {
    13.     [23]=>   int(3)
    14.     [19]=>   int(1)
    15.     [21]=>   int(2)
    16.     [18]=>   int(0)
    17.   }
    18. }