За последние 24 часа нас посетил 54171 программист и 1721 робот. Сейчас ищет 841 программист ...

Сортировка двумерного массива

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

  1. easemashko

    easemashko Новичок

    С нами с:
    19 ноя 2015
    Сообщения:
    1
    Симпатии:
    0
    Всем привет!
    У меня вопрос.
    Почему так сортируется правильно
    Код (PHP):
    1. $array[] = array('soc' => 3, 'code'=>1);
    2. $array[] = array('soc' => 2, 'code'=>1);
    3. $array[] = array('soc' => 1, 'code'=>1);
    4. $array[] = array('soc' => 1, 'code'=>1);
    5. $array[] = array('soc' => 2, 'code'=>5);
    6. $array[] = array('soc' => 1, 'code'=>2);
    7. $array[] = array('soc' => 3, 'code'=>2);
    8.  
    9. //usage
    10. print_r("<pre>");
    11. print_r(multiSort($array, 'soc', 'code'));
    12. print_r("</pre>");
    13.  
    14.  
    15.  
    16. function multiSort() {
    17.     //get args of the function
    18.     $args = func_get_args();
    19.     $c = count($args);
    20.     if ($c < 2) {
    21.         return false;
    22.     }
    23.     //get the array to sort
    24.     $array = array_splice($args, 0, 1);
    25.     $array = $array[0];
    26.     
    27.  
    28.     
    29.     //sort with an anoymous function using args
    30.     usort($array, function($a, $b) use($args) {
    31.  
    32.         $i = 0;
    33.         $c = count($args);
    34.         $cmp = 0;
    35.         while($cmp == 0 && $i < $c)
    36.         {
    37.             $cmp = strcmp($a[ $args[ $i ] ], $b[ $args[ $i ] ]);
    38.             $i++;
    39.         }
    40.  
    41.         return $cmp;
    42.  
    43.     });
    44.  
    45.     return $array;
    46.  
    47. }
    48.  
    а вот так
    Код (PHP):
    1. $array[] = array('soc' => 3, 'code'=>1);
    2. $array[] = array('soc' => 2, 'code'=>1);
    3. $array[] = array('soc' => 1, 'code'=>1);
    4. $array[] = array('soc' => 1, 'code'=>1);
    5. $array[] = array('soc' => 2, 'code'=>5);
    6. $array[] = array('soc' => 1, 'code'=>2);
    7. $array[] = array('soc' => 3, 'code'=>2);
    8.  
    9. //usage
    10. print_r("<pre>");
    11. print_r(multiSort($array, 'soc', 'code'));
    12. print_r("</pre>");
    13.  
    14.  
    15.  
    16. function multiSort() {
    17.     //get args of the function
    18.     $args = func_get_args();
    19.     $c = count($args);
    20.     if ($c < 2) {
    21.         return false;
    22.     }
    23.     //get the array to sort
    24.     $array = array_splice($args, 0, 1);
    25.     $array = $array[0];
    26.     
    27.  
    28.     
    29.     //sort with an anoymous function using args
    30.     usort($array, function($a, $b) use($args) {
    31.  
    32.         $i = 0;
    33.         $c = count($args);
    34.         $cmp = 0;
    35.         while($cmp == 0 && $i < $c)
    36.         {
    37.             $cmp = ($a[ $args[ $i ] ] > $b[ $args[ $i ] ]) ? 1 : -1;
    38.             $i++;
    39.         }
    40.  
    41.         return $cmp;
    42.  
    43.     });
    44.  
    45.     return $array;
    46.  
    47. }
    48.  
    неправильно.
    И вообще не очень понятно как именно эта сортировка работает. Сама процедура usort имеется ввиду. Она работает пузырьком?

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

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

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

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    easemashko, к чему вся эта порнография!?
    array_multisort справится с данной задачей.