【问题标题】:How to sort an array with an year and custom string?如何使用年份和自定义字符串对数组进行排序?
【发布时间】:2023-03-25 07:20:02
【问题描述】:

我有一个这样的数组

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

按年排序,但每年按季度排序。可能吗?如果是那怎么办?

【问题讨论】:

  • 我投票结束这个问题,因为php.net/manual/en/array.sorting.php
  • 我认为那些 php 排序功能是不可能的。
  • Q1、Q2 这些是你数组的键吗?
  • Q2 2012这个完整的是数组键。
  • @Bhaskar 如果只有 Q1 和 Q2 是键,是否有可能。不是年份?

标签: php arrays sorting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我已尝试了解您的问题。希望对您有所帮助。

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

    更新:根据您的评论,这里是更新的代码:

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

    【讨论】:

    • Q2 2012 complete 是数组键
    • 那么key的值是多少?
    • i-e array('Q2 2017' =&gt; array(), 'Q1 2017' =&gt; array())
    • @Ahmad,请检查更新的答案,希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2023-01-01
    • 2020-08-15
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多