Home > Software design >  PHP How can I split Array into more arrays, when value is encountered in array?
PHP How can I split Array into more arrays, when value is encountered in array?

Time:01-07

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.

  • Related