数组关键字的排序,其中关键字标记为Apr 16-30,May 1-15


Sorting of array keys in which keys are labeled Apr 16-30, May 1-15

我得到了一个数组,其中包含他们月份组的密钥

$array = [
  'Apr 1-15' => [],
  'May 1-15' => [],
  'Apr 16-30 => [],
 ];

,我想这样分类

$array = [
  'Apr 1-15' => [],
  'Apr 16-30 => [],
  'May 1-15' => [],
 ];

我现在做的是:

uksort($data, function ($a, $b) {
  $a = explode(' ', $a);
  $b = explode(' ', $b);
  return strcasecmp($a[0], $b[0]);
});

但我仍然无法以正确的方式对它们进行分类。有什么帮助吗?感谢

使用ksort()对数组进行排序:

<?php
$array = [
  'Apr 1-15' => [],
  'May 1-15' => [],
  'Apr 16-30' => []
];
ksort($array);
print_r($array);

将输出:

Array
(
    [Apr 1-15] => Array
        (
        )
    [Apr 16-30] => Array
        (
        )
    [May 1-15] => Array
        (
        )
)

这段代码对我来说很好:

$data = array(
  'Apr 1-15' => 1,
  'May 1-15' => 2,
  'Apr 16-30' => 3,
 );

uksort($data, function ($a, $b) {
  $a = explode(' ', $a);
  $b = explode(' ', $b);
  return strcasecmp($a[0], $b[0]);
});
foreach ($data as $val)
{
    echo $val."<br />";
}

使用usort

$aDates = array( 
    'Apr 1-15'  => '',
    'Jan 2'     => '',
    'Feb 4-15'  => '',
    'Dec 28-30' => '',
    'Nov 12-15' => '',
    'Oct 14-15' => '',
    'May 1-15'  => '',
    'Apr 23-30' => '',
    'Apr 2-30'  => '',
    'Apr 4-30'  => ''
);
$aKeys = array_keys( $aDates );
function compareDates( $a, $b )
{
    return strtotime( $a ) - strtotime( $b );
}    
usort( $aKeys, 'compareDates');
var_dump( $aKeys );

退货:

// array(10) {
//   [0]=>
//   string(5) "Jan 2"
//   [1]=>
//   string(8) "Feb 4-15"
//   [2]=>
//   string(8) "Apr 1-15"
//   [3]=>
//   string(8) "Apr 2-30"
//   [4]=>
//   string(8) "Apr 4-30"
//   [5]=>
//   string(9) "Apr 23-30"
//   [6]=>
//   string(8) "May 1-15"
//   [7]=>
//   string(9) "Oct 14-15"
//   [8]=>
//   string(9) "Nov 12-15"
//   [9]=>
//   string(9) "Dec 28-30"
// }

您是否可以在它周围添加另一个数组,使其成为多级数组,并按照检索/生成它们的正确顺序为每个数组(包含日期组等)提供一个唯一的id?

$array = array(
  array(1, array('Apr 1-15', 'more values'),
  array(2, array('Apr 16-30', 'more values'),
  array(3, array('May 1-15', 'more values'),  
);
asort($array);

然后$array[0][0]将等于"Apr 1-15",$array[0][1]则等于您在其旁边选择的第二个值。