我得到了一个数组,其中包含他们月份组的密钥
$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]则等于您在其旁边选择的第二个值。