从具有第二个数组的位置和长度的数组中取出数组

时间:2018-09-26 21:46:29

标签: php arrays

假设您有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。

1 个答案:

答案 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);

说明:

  1. array_search将返回数组中的数字位置
  2. $fromEnd是数组末尾的切片,我们将其放在结果的前面。如果当前数字位置大于期望的数字,则为空。
  3. $fromStart是我们要获取的数组开头的切片。如果当前数字位置低于期望值,则不会更改我们的输入数组。
  4. 最后一步是合并这两个数组并限制结果的长度。