我有一个包含月份组密钥的数组
$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]);
});
但我仍然无法以正确的方式对它们进行排序。有什么帮助解决这个问题?感谢
答案 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] 等于你选择的第二个值。