Как отсортировать массив с годом и настраиваемой строкой?

У меня есть такой массив

Q1 2017 Q3 2017 Q3 2012 Q4 2015 Q4 2017 Q2 2017 

Q = квартал года

Я хочу отсортировать этот массив следующим образом

 Q2 2012 Q4 2015 Q1 2017 Q2 2017 Q3 2017 Q4 2017 

Сортировка производится в год, но каждый год она находится на четверть. Является ли это возможным? Если да, то как?

@Ahmad try usort (), как показано ниже:

 <?php $arr = array ( array ('Q1',2017), array ('Q3',2017), array ('Q3',2012), array ('Q4',2015), array ('Q4',2017), array ('Q2',2017), ); function sortArr($a, $b){ if($a[1] < $b[1]){ return -1; } else if($a[1] == $b[1]){ return ($a[0] < $b[0] ? -1 : 1); } else{ return 1; } } usort($arr, "sortArr"); echo "<pre>"; print_r($arr); 

Я пытался понять ваш вопрос. Надеюсь, эта помощь.

 $arr = array ( array ('Q1',2017), array ('Q3',2017), array ('Q3',2012), array ('Q4',2015), array ('Q4',2017), array ('Q2',2017), ); $new = array(); foreach($arr as $subarr){ $new[$subarr[1]][] = $subarr[0]; sort($new[$subarr[1]]); } ksort($new); $finalarr = array(); foreach($new as $key => $val){ foreach($val as $k=>$v){ $finalarr[] = array($v, $key); } } echo "<pre>"; print_r($finalarr); 

Демо-версия PHP

Обновление: согласно вашему комментарию, здесь обновлен код:

 $arr = array ('Q1 2017'=>'some value', 'Q3 2017'=>'some value', 'Q3 2012'=>'some value', 'Q4 2015'=>'some value', 'Q4 2017'=>'some value', 'Q2 2017'=>'some value'); $new = array(); foreach($arr as $key=>$subarr){ $tempArr = explode(' ', $key); $new[$tempArr[1]][$tempArr[0]] = $subarr; asort($new[$tempArr[1]]); } ksort($new); $secondarr = array(); foreach($new as $k=>$v){ ksort($v); $secondarr[$k] = $v; } foreach($secondarr as $key => $val){ foreach($val as $k=>$v){ $newkey = $k.' '.$key; $finalarr[$newkey] = $v; } } echo "<pre>"; print_r($finalarr); 

Демо-код Php