Разбить массив на части со смещением
Имеется следующий массив:
$arr = [
"0"=>"2010",
"1"=>"2011",
"2"=>"2012",
"3"=>"2013",
// ...
// ...
// ...,
"10"=>"2020",
"n"=>"..."
];
Мне нужно получить из него массив следующего вида:
//Получить массивы
Array
(
[0] => Array
(
[0] => 2010
[1] => 2011
)
[1] => Array
(
[0] => 2011
[1] => 2012
)
[2] => Array
(
[0] => 2012
[1] => 2013
)
[n-1] => Array
(
[0] => 2019
[1] => 2020
)
[n] => Array
(
[0] => 20nn
)
)
Необходимо разбить тот массив лет на интервалы таким образом чтобы конец каждого интервала становился началом следующего.
Ответы (1 шт):
Автор решения: Михаил Ребров
→ Ссылка
В вашем случае нужно просто пройтись со второго до предпоследнего элемента и складывать в новый массив один вложенный массив, состоящий из элемента с текущим индексом и с индексом на единицу меньше.
Чтобы не городить проверок внутри цикла - последний элемент проще положить вручную
<?php
$data = [
0 => 2000, 1 => 2001, 2 => 2002, 3 => 2003, 4 => 2004,
5 => 2005, 6 => 2006, 7 => 2007, 8 => 2008, 9 => 2009,
10 => 2010, 11 => 2011, 12 => 2012, 13 => 2013, 14 => 2014,
15 => 2015, 16 => 2016, 17 => 2017, 18 => 2018, 19 => 2019,
20 => 2020, 21 => 2021, 22 => 2022
];
$result = [];
// обход начинаем не с первого, а со второго элемента,
// чтобы предыдущий элемент всегда был в наличии
// заканчиваем предпоследним, чтобы не выйти за границы массива
// и чтобы не городить проверки внутри цикла
for ( $i=1; $i < count($data)-1; $i++) {
$result[]= [
$data[$i-1], // предыдущий элемент
$data[$i] // текущий элемент
];
}
// последний вложенный массив из одного элемента проще вставить вручную
$result[]=[
$data[count($data)-1]
];
print_r($result);
вывод
Array
(
[0] => Array
(
[0] => 2000
[1] => 2001
)
[1] => Array
(
[0] => 2001
[1] => 2002
)
[2] => Array
(
[0] => 2002
[1] => 2003
)
[3] => Array
(
[0] => 2003
[1] => 2004
)
...
[19] => Array
(
[0] => 2019
[1] => 2020
)
[20] => Array
(
[0] => 2020
[1] => 2021
)
[21] => Array
(
[0] => 2022
)
)