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
Форумы портала PHP.SU :: Версия для печати :: помогите отсортировать массив по клюку
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » помогите отсортировать массив по клюку

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

1. aleksey7 - 23 Января, 2018 - 09:07:07 - перейти к сообщению
объясните пожалуйста как отсортировать массив по клюку '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. );
2. Строитель - 23 Января, 2018 - 09:31:54 - перейти к сообщению
aleksey7, почитайте про array_multi_sort(). Пример написать пока не могу, т.к. не за ПК.
3. aleksey7 - 23 Января, 2018 - 21:27:05 - перейти к сообщению
я вроде добился нужного результата но хотелось бы знать как это делается более профессионально

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.  
4. Sail - 23 Января, 2018 - 21:46:18 - перейти к сообщению
aleksey7, вариант:
PHP:
скопировать код в буфер обмена
  1. uasort($list, function($a, $b) { return $a['v']['y'] > $b['v']['y'];});
5. aleksey7 - 23 Января, 2018 - 21:57:49 - перейти к сообщению
Sail пишет:
aleksey7, вариант:
PHP:
скопировать код в буфер обмена
  1. uasort($list, function($a, $b) { return $a['v']['y'] > $b['v']['y'];});


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

 

Powered by ExBB FM 1.0 RC1