按键标记为4月16日至30日,5月1日至15日的数组键的排序

时间:2015-03-17 08:50:49

标签: php sorting multidimensional-array

我有一个包含月份组密钥的数组

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

但我仍然无法以正确的方式对它们进行排序。有什么帮助解决这个问题?感谢

4 个答案:

答案 0 :(得分:1)

  

使用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"
// }

答案 1 :(得分:1)

这段代码对我很好:

$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 />";

}

答案 2 :(得分:1)

使用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
        (
        )
)

答案 3 :(得分:0)

你可以在它周围添加另一个数组,使其成为一个多级数组,并按照检索/生成的正确顺序为每个数组(包含日期组和更多数组)提供唯一的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] [0] 等于“Apr 1-15”和 $ array [0] [0] [1] 等于你选择的第二个值。