这似乎是书中最古老的问题,有数百种资源可用,但到目前为止,我尝试的每个解决方案都没有解决我的问题。我希望你能提供帮助。
我正在尝试显示显示最近31天数据的图表。输出的数组如下所示:
$data[
0 =>
'day' => 10,
'amount' => 5,
'count' => 2
1 =>
'day' => 16,
'amount' => 4,
'count' => 2
2 =>
'day' => 21,
'amount' => 16,
'count' => 1
3 =>
'day' => 11,
'amount' => 0,
'count' => 0
4 =>
'day' => 12,
'amount' => 0,
'count' => 0
]
基本上这个数组由两部分组成。前3个内部数组是包含金额和计数的天数,其余27个是任何未计入的天数,其金额和计数设置为0.因此,例如$data[5]
将是第13天和$data[21]
第31天。$data[22]
将等于第1天,直至第9天,从而显示过去31天。
此外,还有一个我们想要输出的有序数组。
$days[
0 =>
'day' => 10
1 =>
'day' => 11
2 =>
'day' => 12
...
30 =>
'day' => 9
]
我已经尝试了下面的内容但是$data
现在已经订购了,它基本上只是$days
的副本,并且丢失了$data
中保留的其他值。
$data = array_uintersect($days, $data, array($this, 'compare_days'));
function compare_days($order, $array) {
return strcmp($order['day'], $array['day']);
}
怎么了?如何对$data
进行排序,以便保留数据并根据需要在$days
中对其进行排序?
答案 0 :(得分:3)
只需使用uasort
作为
uasort($data, function($a,$b) use ($days){
foreach($days as $value){
if($a['day'] == $value['day']){
return 0;
break;
}
if($b['day'] == $value['day']){
return 1;
break;
}
}
});
答案 1 :(得分:0)
您可以使用:
foreach ($data as $key => $row) {
$days[$key] = $row['day'];
$amount[$key] = $row['amount'];
}
array_multisort($days, SORT_ASC, $amount, SORT_ASC, $data);
print_r($data);