我试图根据数组的值拆分数组,我尝试使用min和max,但无法弄清楚如何按每个键的值对数组进行分组
我的数组
Array
(
[2018-10-18] => 5
[2018-10-19] => 5
[2018-10-20] => 5
[2018-10-21] => 5
[2018-10-22] => 5
[2018-10-23] => 5
[2018-10-24] => 5
[2018-10-25] => 5
[2018-10-26] => 5
[2018-10-27] => 5
[2018-10-28] => 4
[2018-10-29] => 4
[2018-10-30] => 4
[2018-10-31] => 4
[2018-11-01] => 4
[2018-11-02] => 4
[2018-11-03] => 4
)
所需结果
Array
(
[0] => array(
'start' => '2018-10-18',
'end' => '2018-10-27',
'value' => 5
),
[1] => array(
'start' => '2018-10-28',
'end' => '2018-11-03',
'value' => 4
)
)
答案 0 :(得分:0)
蛮力方法是先将数组旋转为按组的值,然后对这些组进行计算:
// Start with your source data in $array, then:
// Rotate the array so it's keyed by value. I think you were getting
// stuck on this step. The result is an array of value => array (dates)
$rotate = [];
foreach ($array as $date => $value) {
$rotate[$value][] = $date;
}
// Now we'll just calculate the values we want
$group = [];
foreach ($rotate as $value => $dates) {
$group[] = [ 'start' => min($dates), 'end' => max($dates), 'value' => $value ];
}
答案 1 :(得分:0)
您只能循环唯一值,并使用array_intersect查找这些值在哪里。
foreach(array_unique($arr) as $v){
$temp = array_keys(array_intersect($arr, [$v]));
$new[] = ['start' => current($temp),
'end' => end($temp),
'value' => $v];
}
var_dump($new);
此输出:
array(2) {
[0]=>
array(3) {
["start"]=>
string(10) "2018-10-18"
["end"]=>
string(10) "2018-10-27"
["value"]=>
int(5)
}
[1]=>
array(3) {
["start"]=>
string(10) "2018-10-28"
["end"]=>
string(10) "2018-11-03"
["value"]=>
int(4)
}
}