Сортировка многомерного массива PHP на основе ключа?

Я пытаюсь сортировать хэш-таблицу PHP на основе ключа specialc. Структура данных выглядит так:

print_r($mydata); Array( [0] => Array ( [type] => suite [name] => A-Name ) [1] => Array ( [type] => suite [name] => C-Name ) [2] => Array ( [type] => suite [name] => B-Name ) ) 

Я пробовал ksort , сортировать , использовать, но ничего не работает. Я пытаюсь сортировать на основе двух ключевых слов.

Это была моя попытка использовать usort:

 function cmp($a, $b) { return $b['name'] - $a['name']; } usort($mydata, "cmp"); 

Есть ли простой способ сделать это или мне нужно написать пользовательскую функцию сортировки?

Related of "Сортировка многомерного массива PHP на основе ключа?"

Мышление, более полезное и практичное http://php.net/manual/en/function.sort.php

 function array_sort($array, $on, $order=SORT_ASC){ $new_array = array(); $sortable_array = array(); if (count($array) > 0) { foreach ($array as $k => $v) { if (is_array($v)) { foreach ($v as $k2 => $v2) { if ($k2 == $on) { $sortable_array[$k] = $v2; } } } else { $sortable_array[$k] = $v; } } switch ($order) { case SORT_ASC: asort($sortable_array); break; case SORT_DESC: arsort($sortable_array); break; } foreach ($sortable_array as $k => $v) { $new_array[$k] = $array[$k]; } } return $new_array; } 

Как использовать

  $list = array( array( 'type' => 'suite', 'name'=>'A-Name'), array( 'type' => 'suite', 'name'=>'C-Name'), array( 'type' => 'suite', 'name'=>'B-Name') ); $list = array_sort($list, 'name', SORT_ASC); array(3) { [0]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "A-Name" } [2]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "B-Name" } [1]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "C-Name" } } 

Попробуйте эту функцию usort:

  function cmp($a, $b){ if ($a == $b) return 0; return ($a['name'] < $b['name']) ? -1 : 1; } $my_array = array( 0 => array ( 'type' => 'suite' ,'name' => 'A-Name' ) ,1 => array ( 'type' => 'suite' ,'name' => 'C-Name' ) ,2 => array ( 'type' => 'suite' ,'name' => 'B-Name' ) ); usort($my_array, "cmp"); 

Если вы используете его в классе, второй параметр изменяется на массив следующим образом:

 usort($my_array, array($this,'cmp')); 

array_multisort () – Сортировка нескольких или многомерных массивов

  <?php $a=array( array('a'=>5,'b'=>7),array('c'=>4,'d'=>2),array('e'=>0,'f'=>12) ); function cmp_sort($x,$y){ //your function to compare two keys if($x===$y) return 0; else return ($x<$y?1:-1); } uasort($a,'cmp_sort'); //call user-defined compare function print_r($a); //printing the sorted array ?> 

Выход =>

Массив ([2] => Массив ([e] => 0 [f] => 12) [1] => Массив ([c] => 4 [d] => 2) [0] => Массив ([ a] => 5 [b] => 7))

 $this->aasort($array,"key"); function aasort (&$array, $key) { $sorter=array(); $ret=array(); reset($array); foreach ($array as $ii => $va) { $sorter[]=$va[$key]; } arsort($sorter); foreach ($sorter as $ii => $va) { $ret[]=$array[$ii]; } return $array=$ret; } 

попробуйте этот рекурсивный режим, который я использовал в Magento REST API:

 $parameters = ['searchCriteria' => ['currentPage' => 1, 'pageSize' => 20]]; $parameters['searchCriteria']['filter_groups'][0]['filters'][0] = ['condition_type' => 'from', 'field' => 'updated_at', 'value' => '2017-01-01T00:00:00']; $parameters['searchCriteria']['filter_groups'][1]['filters'][0] = ['condition_type' => 'to', 'field' => 'updated_at', 'value' => '2017-12-31T23:59:59']; function sortArrayByKeyAsc($_params){ if(is_array($_params)){ uksort($_params, 'strnatcmp'); foreach ($_params as $key => $value){ if(is_array($value)){ $_params[$key] = sortArrayByKeyAsc($value); } } } return $_params; }