Я хочу нарезать 5 элементов из массива, давая средний индекс:
$a = [1,2,3,4,5,6,7,8,9,10];
Примеры:
[1,2,3,4,5]
[2,3,4,5,6]
[4,5,6,7,8]
[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];
Но это не работает, когда доходит до конца (обе стороны).
Попробуйте установить верхнюю и нижнюю границу с max/min
$right = array_slice($a,min($i,count($a)),2);
$left = array_slice($a,max(0,$i-2),2);
Это, кажется, делает то, что вы после:
$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";
}