我定义了myArr = ("Apr","Mar","May")
。是否有排序函数按自然月份序列对数组成员进行排序,否则按字母表排序。
数组成员变量可以在运行时更改。
我希望输出跟随 3月,4月,5月使用foreach循环。
答案 0 :(得分:2)
您可以使用usort()并创建自己的函数来比较月份。
function monthCompare($a, $b)
{
$months = array('jan' => 1, 'feb' => 2..._);
if($a == $b)
{
return 0;
}
return ($months[$a] > $months[$b]) ? 1 : -1;
}
答案 1 :(得分:1)
在@ preinheimer的回答中建立一个版本,如果名称不存在,这个版本将进行顺序排序:
$data = array("Apr", "Mar", "Jan", "Feb", "ddd", "aaa", "ccc");
function monthCompare($a, $b) {
$a = strtolower($a);
$b = strtolower($b);
$months = array(
'jan' => 1,
'feb' => 2,
'mar' => 3,
'apr' => 4,
'may' => 5
);
if($a == $b)
return 0;
if(!isset($months[$a],$months[$b]))
return $a > $b;
return ($months[$a] > $months[$b]) ? 1 : -1;
}
usort($data, "monthCompare");
echo "<pre>";
print_r($data);
返回:
Array
(
[0] => aaa
[1] => ccc
[2] => ddd
[3] => Jan
[4] => Feb
[5] => Mar
[6] => Apr
)
但是 - 这突出了你的问题的逻辑缺陷。您已经要求按月份顺序排序,否则按字母排序。问题在于您没有以可靠的方式定义排序顺序。例如,使用上面的algorythm和数组"ddd", "aaa", "ccc", "Apr", "Mar", "Jan", "Feb"
(即相同的元素)给出结果:
Array
(
[0] => aaa
[1] => Jan
[2] => Feb
[3] => Mar
[4] => Apr
[5] => ccc
[6] => ddd
)
根据您的要求,这两个答案都是正确的,因此您需要更详细地定义排序要求。
答案 2 :(得分:0)
没有。没有这样的功能。 但是 ....你仍然可以优雅地解决你的问题。您应该将月份名称与数字相关联(1表示1月,2表示2月,依此类推)。这是编程中最常用的方法。
将数组定义为:
$myArr = array(1=>"Jan", 2=>"Feb" ... )
然后你可以按键(ksort)对你的$ myArr进行排序:
ksort($myArr);
var_export($myArr);
这会按键按升序对数组进行排序。