拥有以下数组:
array(2) {
[1]=> // <--------------- NOTICE THIS INDEX
array(4) {
[0]=>
array(2) {
[0]=>
string(4) "2012"
[1]=>
float(1)
}
[1]=>
array(2) {
[0]=>
string(4) "2013"
[1]=>
float(1)
}
[2]=>
array(2) {
[0]=>
string(4) "2014"
[1]=>
float(2)
}
[3]=>
array(2) {
[0]=>
string(4) "2015"
[1]=>
float(1)
}
}
[2]=> // <--------------- NOTICE THIS INDEX
&array(7) {
[0]=>
array(2) {
[0]=>
string(4) "2009"
[1]=>
float(7)
}
[1]=>
array(2) {
[0]=>
string(4) "2010"
[1]=>
float(2)
}
[2]=>
array(2) {
[0]=>
string(4) "2011"
[1]=>
float(2)
}
[3]=>
array(2) {
[0]=>
string(4) "2012"
[1]=>
float(0)
}
[4]=>
array(2) {
[0]=>
string(4) "2013"
[1]=>
float(19)
}
[5]=>
array(2) {
[0]=>
string(4) "2014"
[1]=>
float(8)
}
[6]=>
array(2) {
[0]=>
string(4) "2015"
[1]=>
float(8)
}
}
}
我想先用最早的年份对数组进行重新排序,这意味着在上面的示例中,索引为2
的数组具有2009
,并且数组的最旧年份具有索引{{ 1}}是1
,必须改变位置。我想要的输出应该是:
2012
这里的问题是我使用以下函数按日期重新排序(数组为array(2) {
[2]=>
&array(7) {
[0]=>
array(2) {
[0]=>
string(4) "2009"
[1]=>
float(7)
}
[1]=>
array(2) {
[0]=>
string(4) "2010"
[1]=>
float(2)
}
[2]=>
array(2) {
[0]=>
string(4) "2011"
[1]=>
float(2)
}
[3]=>
array(2) {
[0]=>
string(4) "2012"
[1]=>
float(0)
}
[4]=>
array(2) {
[0]=>
string(4) "2013"
[1]=>
float(19)
}
[5]=>
array(2) {
[0]=>
string(4) "2014"
[1]=>
float(8)
}
[6]=>
array(2) {
[0]=>
string(4) "2015"
[1]=>
float(8)
}
}
[1]=>
array(4) {
[0]=>
array(2) {
[0]=>
string(4) "2012"
[1]=>
float(1)
}
[1]=>
array(2) {
[0]=>
string(4) "2013"
[1]=>
float(1)
}
[2]=>
array(2) {
[0]=>
string(4) "2014"
[1]=>
float(2)
}
[3]=>
array(2) {
[0]=>
string(4) "2015"
[1]=>
float(1)
}
}
}
):
arraySeries
它工作正常,但索引已更改
$years = array();
foreach ($arraySeries as $key => $row)
{
$years[$key] = $row[0];
}
array_multisort($years, SORT_ASC, $arraySeries);
如何在不使用array(2) {
[0]=> // <-------- HERE IS A 0 WHEN IT SHOULD BE 2
&array(7) {
[0]=>
array(2) {
[0]=>
string(4) "2009"
[1]=>
float(7)
}
[1]=>
array(2) {
[0]=>
string(4) "2010"
[1]=>
float(2)
}
[2]=>
array(2) {
[0]=>
string(4) "2011"
[1]=>
float(2)
}
[3]=>
array(2) {
[0]=>
string(4) "2012"
[1]=>
float(0)
}
[4]=>
array(2) {
[0]=>
string(4) "2013"
[1]=>
float(19)
}
[5]=>
array(2) {
[0]=>
string(4) "2014"
[1]=>
float(8)
}
[6]=>
array(2) {
[0]=>
string(4) "2015"
[1]=>
float(8)
}
}
[1]=> // <------------ THIS ONE IS 1 BY PURE LUCK
array(4) {
[0]=>
array(2) {
[0]=>
string(4) "2012"
[1]=>
float(1)
}
[1]=>
array(2) {
[0]=>
string(4) "2013"
[1]=>
float(1)
}
[2]=>
array(2) {
[0]=>
string(4) "2014"
[1]=>
float(2)
}
[3]=>
array(2) {
[0]=>
string(4) "2015"
[1]=>
float(1)
}
}
}
的情况下按日期重新排序数组?问题是,array_multisort
文档声明:
注意:将保留字符串键,但数字键将是 重新编制索引,从0开始并增加1。
我应该在这里使用array_multisort
吗?这只是两个项目的示例,但我可以获得很多要重新排序的项目。
提前致谢。
答案 0 :(得分:2)
假设每个子数组中的年份已按您的示例排序,uasort()
将如下所示:
<?php
//Definition of the custom sort function
function my_sort($a,$b)
{
//By using $a[0][0] you access the the first year entry of your subarray. It requires the sub-array to be sorted accordingly.
if ($a[0][0] == $b[0][0]) return 0;
return ( (int) $a[0][0] < (int) $b[0][0] ) ? -1 : 1;
}
//Setting up the array
$arr = array(
1=>array(
array("2012",(float) 1),
array("2013",(float) 1),
array("2014",(float) 2),
array("2015",(float) 1)
),
2=>array(
array("2009",(float) 7),
array("2010",(float) 2),
array("2011",(float) 2),
array("2012",(float) 0),
array("2013",(float) 19),
array("2014",(float) 8),
array("2015",(float) 8)
),
);
//calling the sort function
uasort($arr,"my_sort");
//output
var_dump($arr);
?>
如果未对子数组进行排序,则需要首先遍历数组以对其进行排序,或修改my_sort()
函数以查找子数组中最早的年份,而不是仅使用$a[0][0]
。
答案 1 :(得分:0)
使用uasort以保持索引:
$years = [
[2013, 2015],
[2009, 2012]
];
uasort($years, function($a, $b) {
return min($a) - min($b);
});