Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: сортировка массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alexiy
Отправлено: 13 Августа, 2013 - 21:58:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 483
Дата рег-ции: Янв. 2011  


Помог: 6 раз(а)




есть массив
PHP:
скопировать код в буфер обмена
  1.  
  2. $data = array(
  3.                       array("id"=>1, "name" => "san40", "points"=>40),
  4.                       array("id"=>2, "name" => "anton", "points"=>20),
  5.                       array("id"=>3, "name" => "igos", "points"=>1)
  6.                       ...
  7.                     );
  8.  

как можно сделать сортировку массива $data, по ключу "points" и упорядочить данные в убывающем порядке или просто получить два наибольших значений points?
 
 Top
Саныч Модератор
Отправлено: 13 Августа, 2013 - 22:17:25
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




PHP:
скопировать код в буфер обмена
  1. // array_column for PHP < 5.5.0
  2. if (!function_exists('array_column')) {
  3.     function array_column(array $input, $column_key, $index_key = null) {        
  4.         if (!is_int($column_key) && !is_string($column_key)) {
  5.             trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING);
  6.             return false;
  7.         }
  8.        
  9.         if (!is_null($index_key) && !is_int($index_key) && !is_string($index_key)) {
  10.             trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING);
  11.             return false;
  12.         }
  13.        
  14.         $result = array();
  15.        
  16.         foreach ($input as $arr) {
  17.             if (is_array($arr) && array_key_exists($column_key, $arr)) {                
  18.                 if (!is_null($index_key) && array_key_exists($index_key, $arr)) {
  19.                     $result[$arr[$index_key]] = $arr[$column_key];
  20.                 } else {
  21.                     $result[] = $arr[$column_key];
  22.                 }
  23.             }
  24.         }
  25.        
  26.         return $result;
  27.     }
  28. }
  29.  
  30. /////////////////////
  31. $data = array(
  32.     array("id"=>1, "name" => "san40", "points"=>40),
  33.     array("id"=>2, "name" => "anton", "points"=>20),
  34.     array("id"=>3, "name" => "igos", "points"=>1),
  35.     array("id"=>4, "name" => "igos", "points"=>132),
  36. );
  37.  
  38. $data = array_column($data, 'points');
  39. rsort($data);
  40.  
  41. var_dump($data);


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Августа, 2013 - 22:34:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $data = array(
  3.         array("id"=>1, "name" => "san40", "points"=>40),
  4.         array("id"=>3, "name" => "igos", "points"=>1),
  5.         array("id"=>2, "name" => "anton", "points"=>20)
  6. );
  7.  
  8. $dataCopy = $data;
  9.  
  10. usort($dataCopy, function($a, $b){
  11.     return ($a['points'] > $b['points']) ? -1 : $a['points'] != $b['points'];
  12. });
  13.  
  14. print_r(array_slice($dataCopy, 0, 2));
  15.  

(Отредактировано автором: 14 Августа, 2013 - 09:12:26)

 
 Top
LIME
Отправлено: 14 Августа, 2013 - 08:58:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PHP:
скопировать код в буфер обмена
  1. uasort($data, function($a, $b){
  2.     return  $a['points'] - $b['points'];
  3. });
не?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB