У меня есть такой массив
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