具有以下数组:
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
的数组中最早的年份是 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
的情况下按日期重新排序数组?问题是,作为 array_multisort
文档指出:
Note: String keys will be maintained, but numeric keys will be re-indexed, starting at 0 and increase by 1.
我应该使用 usort
这里?这只是两个项目的示例,但我可以获得很多要重新排序的项目。
提前致谢。
最佳答案
假设每个子数组中的年份已经按照您的示例进行排序,您的 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]
.
关于php - 在 PHP 中按日期重新排序数组并维护索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38324236/