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]   

> Без описания
aleksey7
Отправлено: 23 Января, 2018 - 09:07:07
Post Id


Новичок


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


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




объясните пожалуйста как отсортировать массив по клюку 'y'

PHP:
скопировать код в буфер обмена
  1. $list=array(
  2.   'a'=>array(
  3.     'v'=> array('x'=>1,'y'=>9,'z'=>3),
  4.     'f'=> array('x'=>1,'y'=>9,'z'=>3)
  5.   ),
  6.   'b'=>array(
  7.     'v'=> array('x'=>1,'y'=>12,'z'=>3),
  8.     'f'=> array('x'=>1,'y'=>12,'z'=>3),
  9.     't'=> array('x'=>1,'y'=>12,'z'=>3),
  10.   ),
  11.   'c'=>array(
  12.     'v'=> array('x'=>1,'y'=>9,'z'=>3),
  13.     'f'=> array('x'=>1,'y'=>9,'z'=>3),
  14.     'o'=> array('x'=>1,'y'=>9,'z'=>3),
  15.     'p'=> array('x'=>1,'y'=>9,'z'=>3),
  16.   ),
  17.   'd'=>array(
  18.     'v'=> array('x'=>1,'y'=>'abc','z'=>3),
  19.     'f'=> array('x'=>1,'y'=>'abc','z'=>3)
  20.   ),
  21.   'e'=>array(
  22.     'v'=> array('x'=>1,'y'=>12,'z'=>3),
  23.     'f'=> array('x'=>1,'y'=>12,'z'=>3)
  24.   ),
  25.   'f'=>array(
  26.     'r'=> array('x'=>1,'y'=>21,'z'=>3)
  27.   ),
  28.   'g'=>array(
  29.     'v'=> array('x'=>1,'y'=>'abc','z'=>3),
  30.     'f'=> array('x'=>1,'y'=>'abc','z'=>3)
  31.   ),
  32. );

(Отредактировано автором: 23 Января, 2018 - 21:58:26)

 
 Top
Строитель
Отправлено: 23 Января, 2018 - 09:31:54
Post Id



Участник


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


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




aleksey7, почитайте про array_multi_sort(). Пример написать пока не могу, т.к. не за ПК.
 
 Top
aleksey7
Отправлено: 23 Января, 2018 - 21:27:05
Post Id


Новичок


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


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




я вроде добился нужного результата но хотелось бы знать как это делается более профессионально

PHP:
скопировать код в буфер обмена
  1.  
  2. $list=array(
  3.   'a'=>array(
  4.     'v'=> array('x'=>1,'y'=>9,'z'=>3),
  5.     'f'=> array('x'=>1,'y'=>9,'z'=>3)
  6.   ),
  7.   'b'=>array(
  8.     'v'=> array('x'=>1,'y'=>12,'z'=>3),
  9.     'f'=> array('x'=>1,'y'=>12,'z'=>3),
  10.     't'=> array('x'=>1,'y'=>12,'z'=>3),
  11.   ),
  12.   'c'=>array(
  13.     'v'=> array('x'=>1,'y'=>9,'z'=>3),
  14.     'f'=> array('x'=>1,'y'=>9,'z'=>3),
  15.     'o'=> array('x'=>1,'y'=>9,'z'=>3),
  16.     'p'=> array('x'=>1,'y'=>9,'z'=>3),
  17.   ),
  18.   'd'=>array(
  19.     'v'=> array('x'=>1,'y'=>'abc','z'=>3),
  20.     'f'=> array('x'=>1,'y'=>'abc','z'=>3)
  21.   ),
  22.   'e'=>array(
  23.     'v'=> array('x'=>1,'y'=>12,'z'=>3),
  24.     'f'=> array('x'=>1,'y'=>12,'z'=>3)
  25.   ),
  26.   'f'=>array(
  27.     'r'=> array('x'=>1,'y'=>21,'z'=>3)
  28.   ),
  29.   'g'=>array(
  30.     'v'=> array('x'=>1,'y'=>'abc','z'=>3),
  31.     'f'=> array('x'=>1,'y'=>'abc','z'=>3)
  32.   ),
  33. );
  34. $tmp = array_map(function($x){
  35.   foreach($x as $k=>$v){
  36.     if (array_key_exists('y', $v)) {
  37.       return $v['y'];
  38.     }
  39.   }
  40.  }, $list);
  41. asort($tmp);
  42. $new=array();
  43. foreach($tmp as $k=>$v){
  44.   $new[ $k ] = $list[$k];
  45. }
  46.  
  47. print_r($new);
  48.  
  49.  

(Отредактировано автором: 23 Января, 2018 - 21:28:19)

 
 Top
Sail
Отправлено: 23 Января, 2018 - 21:46:18
Post Id



Участник


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


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




aleksey7, вариант:
PHP:
скопировать код в буфер обмена
  1. uasort($list, function($a, $b) { return $a['v']['y'] > $b['v']['y'];});
 
 Top
aleksey7
Отправлено: 23 Января, 2018 - 21:57:49
Post Id


Новичок


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


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




Sail пишет:
aleksey7, вариант:
PHP:
скопировать код в буфер обмена
  1. uasort($list, function($a, $b) { return $a['v']['y'] > $b['v']['y'];});


v,f,.. не имеет значения эти ключи динамичны и их может быть больше двух, имеет значения только ключ 'у' который в свою очередь тоже динамичен может быть и string и init по которому нужно отсортировать
 
 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