Нарезать N элементов из середины массива

Я хочу нарезать 5 элементов из массива, давая средний индекс:

$a = [1,2,3,4,5,6,7,8,9,10];

Примеры:

  • Индекс: [0] => Возврат: [1,2,3,4,5]
  • Индекс: [3] => Возврат: [2,3,4,5,6]
  • Индекс: [5] => Возврат: [4,5,6,7,8]
  • Индекс: [9] => Возврат: [6,7,8,9,10]

Я пытался извлечь левую и правую части.

$i = 0 // selected index
$right = array_slice($a,$i,2);
$left = array_slice($a,$i-2,2);
$index = $a[$i];

Но это не работает, когда доходит до конца (обе стороны).

0

Решение

Попробуйте установить верхнюю и нижнюю границу с max/min

$right = array_slice($a,min($i,count($a)),2);
$left = array_slice($a,max(0,$i-2),2);
0

Другие решения

Это, кажется, делает то, что вы после:

$ary = range(1, 10);
$len = 5;

for($index = 0; $index < 10; $index++) {
$start = min(count($ary) - $len, max(0, $index - ($len >> 1)));
$slice = array_slice($ary, $start, $len);
echo $index, ":", implode(",", $slice), "\n";
}
0

По вопросам рекламы [email protected]