За последние 24 часа нас посетили 60945 программистов и 1744 робота. Сейчас ищут 909 программистов ...

Сортировка пользователей, на чистом PHP

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 5 сен 2017.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Решил сделать свою функцию, она может сортировать пользователей по имени и году, в порядке убывания и возрастания, можно ли сократить код?

    PHP:
    1. $mas= [
    2.         0 => [
    3.             'name' => 'Иван',
    4.             'year' => '1980'
    5.         ],
    6.         1 => [
    7.             'name' => 'Надя',
    8.             'year' => '1970'
    9.         ],
    10.        
    11.        
    12.         2 => [
    13.             'name' => 'Вася',
    14.             'year' => '2000'
    15.         ],
    16.         3 => [
    17.             'name' => 'Алиса',
    18.             'year' => '1994'
    19.         ],
    20.         4 => [
    21.             'name' => 'Сергей',
    22.             'year' => '1998'
    23.         ],
    24.         5 => [
    25.             'name' => 'Егор',
    26.             'year' => '1992'
    27.         ],
    28.         6 => [
    29.             'name' => 'Михаил',
    30.             'year' => '2005'
    31.         ],
    32.         7 => [
    33.             'name' => 'Боря',
    34.             'year' => '1991'
    35.         ]
    36.        
    37.     ];
    38.    
    39.    
    40.     echo '<pre>';
    41.         print_r($mas);
    42.     echo '</pre>';
    43.    
    44.    
    45.    
    46.     function sortUser($arr, $key, $compare) {
    47.         if($key == 'name' && $compare == '>'){
    48.             sort($arr);
    49.             return $arr;
    50.         }
    51.        
    52.         elseif($key == 'name' && $compare == '<'){
    53.             rsort($arr);
    54.             return $arr;
    55.         }
    56.        
    57.         elseif($key == 'year') {
    58.             $arrName = [];
    59.             $arrYear = [];
    60.    
    61.             foreach($arr as $k => $v) {
    62.                 $arrName[]=$v['name'];
    63.                 $arrYear[]=$v['year'];
    64.                    
    65.             }
    66.            
    67.             if($compare == '>') {
    68.                 arsort($arrYear); //по убыванию
    69.             }
    70.            
    71.             elseif($compare == '<') {
    72.                 asort($arrYear); //по возрастанию
    73.             }
    74.            
    75.             $num = [];
    76.        
    77.             $num = array_keys($arrYear);
    78.        
    79.             $sortName = [];
    80.             $sortYear = [];
    81.            
    82.             foreach($num as $val) {
    83.                 array_push($sortName, $arrName[$val]);
    84.                 array_push($sortYear, $arrYear[$val]);
    85.                
    86.             }
    87.            
    88.             $newArr2 = [];
    89.            
    90.             for($i = 0; $i < count($num); $i++) {
    91.                 $newArr2[]= $i;
    92.                 $newArr2[$i]=[];
    93.             }
    94.            
    95.        
    96.             for($j = 0; $j < count($num); $j++) {
    97.                 $newArr2[$j]=[
    98.                     'name' => $sortName[$j],
    99.                     'year' => $sortYear[$j]
    100.                     ];
    101.             }
    102.            
    103.            
    104.             return $newArr2;
    105.         }
    106.        
    107.     }
    108.    
    109.     echo '<pre>';
    110.         print_r(sortUser($mas, 'year', '>'));
    111.         print_r(sortUser($mas, 'year', '<'));
    112.         print_r(sortUser($mas, 'name', '<'));
    113.         print_r(sortUser($mas, 'name', '>'));
    114.     echo '</pre>';
    --- Добавлено ---
    Больше двух часов на это ушло.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    Dimon2x нравится это.
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    я не знал про такое решение
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    данные надо сортировать в БД
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Это я знаю, просто сам php надо тоже изучать.
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    можно, если правильно применить готовые функции. http://php.net/manual/ru/array.sorting
    --- Добавлено ---
    п.с. но ты молодец! делать самостоятельно очень полезно для роста.
     
    Dimon2x нравится это.