假设您有20个长度为[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19];
的数组
而且您总是需要从^数组中选择一个13长度的数组。
知道我需要数字14 -但不知道20长度数组中14的索引-,该数组在13长度数组上的位置为5。
$number = 14;
$position = 5;
$array = [];
for ($i = 1; $i <= 13; $i++){
$array[] = (($number - $position + $i)%20);
}
这将打印[9,10,11,12,13,14,15,16,17,18,19,0,1]
但是,这也会打印[-2,-1,0,1,2,3,4,5,6,7,8,9,10]
,而不是[18,19,0,1,2,3,4,5,6,7,8,9,10]
,该数字将是2,位置4。
答案 0 :(得分:1)
这应该有效:
<?php
$input = range(0, 19);
$position = 4;
$number = 2;
$currentNumberPos = array_search($number, $input);
$fromEnd = array_splice($input, min(0, $currentNumberPos - $position), max(0, $position - $currentNumberPos));
$fromStart = array_splice($input, max(0, $currentNumberPos - $position));
$result = array_slice(array_merge($fromEnd, $fromStart), 0, 13);
var_dump($result);
说明:
$fromEnd
是数组末尾的切片,我们将其放在结果的前面。如果当前数字位置大于期望的数字,则为空。$fromStart
是我们要获取的数组开头的切片。如果当前数字位置低于期望值,则不会更改我们的输入数组。