I have this array, and I will like to make a new arra with date values, but when the first STOPSALES value is reached, create a new array, only with date values.
[0]=>
string(10) "2023-03-10"
[1]=>
string(10) "2023-03-11"
[2]=>
string(10) "2023-03-12"
[3]=>
string(10) "2023-03-13"
[4]=>
string(10) "2023-03-14"
[5]=>
string(10) "2023-03-15"
[6]=>
string(9) "STOPSALES"
[7]=>
string(9) "STOPSALES"
[8]=>
string(9) "STOPSALES"
[9]=>
string(9) "STOPSALES"
[10]=>
string(9) "STOPSALES"
[11]=>
string(9) "STOPSALES"
[12]=>
string(9) "STOPSALES"
[13]=>
string(9) "STOPSALES"
[14]=>
string(9) "STOPSALES"
[15]=>
string(9) "STOPSALES"
[16]=>
string(9) "STOPSALES"
[17]=>
string(10) "2023-03-27"
[18]=>
string(10) "2023-03-28"
[19]=>
string(10) "2023-03-29"
[20]=>
string(10) "2023-03-30"
[21]=>
string(10) "2023-03-31"
[22]=>
string(10) "2023-04-01"
[23]=>
string(10) "2023-04-02"
[24]=>
string(10) "2023-04-03"
I will like to have this result
[0]=>
string(10) "2023-03-10"
[1]=>
string(10) "2023-03-11"
[2]=>
string(10) "2023-03-12"
[3]=>
string(10) "2023-03-13"
[4]=>
string(10) "2023-03-14"
[5]=>
string(10) "2023-03-15"
[1]=>
string(10) "2023-03-27"
[1]=>
string(10) "2023-03-28"
[2]=>
string(10) "2023-03-29"
[3]=>
string(10) "2023-03-30"
[4]=>
string(10) "2023-03-31"
[5]=>
string(10) "2023-04-01"
[6]=>
string(10) "2023-04-02"
[7]=>
string(10) "2023-04-03"
Tried for hours with foreach and if statments, but cant find the way.
CodePudding user response:
Here is one way of achieving what you want:
$array = [
"2023-03-10",
"2023-03-11",
"2023-03-12",
"2023-03-13",
"2023-03-14",
"2023-03-15",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"STOPSALES",
"2023-03-27",
"2023-03-28",
"2023-03-29",
"2023-03-30",
"2023-03-31",
"2023-04-01",
"2023-04-02",
"2023-04-03",
];
$result = []; // array of subarrays
$i = 0; // incremented after a "STOPSALES"
$wasStopSales = FALSE; // to avoid creating multiple empty arrays with consecutive "STOPSALES"
foreach ($array as $element) {
if ($element == 'STOPSALES') {
if (!$wasStopSales) { // if that's the first consecutive "STOPSALES"
$i; // let's move to another subarray
}
$wasStopSales = TRUE;
continue;
}
$result[$i][] = $element; // add the current element to the current subarray
$wasStopSales = FALSE; // last value wasn't a "STOPSALES"
}
var_dump($result);
The result is:
array (size=2)
0 =>
array (size=6)
0 => string '2023-03-10' (length=10)
1 => string '2023-03-11' (length=10)
2 => string '2023-03-12' (length=10)
3 => string '2023-03-13' (length=10)
4 => string '2023-03-14' (length=10)
5 => string '2023-03-15' (length=10)
1 =>
array (size=8)
0 => string '2023-03-27' (length=10)
1 => string '2023-03-28' (length=10)
2 => string '2023-03-29' (length=10)
3 => string '2023-03-30' (length=10)
4 => string '2023-03-31' (length=10)
5 => string '2023-04-01' (length=10)
6 => string '2023-04-02' (length=10)
7 => string '2023-04-03' (length=10)
Feel free to ask me if you need more details.