如何使用年份和自定义字符串对数组进行排序?

时间:2017-04-10 10:28:04

标签: php arrays sorting

我有一个像这样的数组

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

排序是按年度进行的,但每年都按季度排序。可能吗?如果是,那么如何?

2 个答案:

答案 0 :(得分:0)

我试着理解你的问题。希望这有帮助。

$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);

Web Testing with JMeter: How To Properly Handle Embedded Resources in HTML Responses

更新:根据您的评论,以下是更新后的代码:

$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 Code Demo

答案 1 :(得分:0)

@Ahmad尝试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);