I have an array for example 2,3,4,10,20,30,102
I need all possible 3 consecutive elements array like below
2,3,4
3,4,10
4,10,20
10,20,30
20,30,102
$arr= array(2,3,4,10,20,30,102);
$arr2=$arr;
$arr3=array();
while(count($arr2)>=3)
{
$array= array_chunk($arr2, 3);
if(count($array)>0)
{
array_push($arr3, $array[0]);
array_shift($arr2);
}
}
var_dump($arr3);
$arr3 is what you want.
I assumed you need all 3-element chunks :
$array = array(2,3,4,10,20,30,102);
$return = array();
for ($i=0; $i<=count($array)-3; $i++)
$return[] = array($array[$i], $array[$i+1], $array[$i+2]);
Use array_slice()
function to get n values from any index:
$array = array(2,3,4,10,20,30,102);
for ($i=0; $i<=count($array)/2 + 1; $i++) {
echo implode(",",array_slice($array,$i,3))."<br/>";
}
Output:
2,3,4
3,4,10
4,10,20
10,20,30
20,30,102
I found the solution:
$chunk=[];
function getGroups($array, $gn){
global $chunk;
$ch = [];
for($i=0;$i<$gn;$i++){
$ch[] = $array[$i];
}
$chunk[] = $ch;
$fe = array_shift($array);
if (count($array) >= $gn){
getGroups($array, $gn);
}
return $chunk;
}
$work = [2,3,4,5,6,7,8,9,10];
$K = 3;
$c = getGroups($work, $K);
<?php
$items = array(2,3,4,10,20,30,102);
$items_count = count($items);
for($i=0; $i <= $items_count - 3; $i++) {
$result[] = array_slice($items, $i, 3);
}
var_export($result);
Output:
array (
0 =>
array (
0 => 2,
1 => 3,
2 => 4,
),
1 =>
array (
0 => 3,
1 => 4,
2 => 10,
),
2 =>
array (
0 => 4,
1 => 10,
2 => 20,
),
3 =>
array (
0 => 10,
1 => 20,
2 => 30,
),
4 =>
array (
0 => 20,
1 => 30,
2 => 102,
),
)