如何从任意位置开始循环遍历整个数组


How can I loop through the entire array starting from any position?

所以我有一个这样的数组:

$arr = [0, 1, 2];

现在我得到一个用户输入,例如

$input = 1;

根据该输入,我希望从该输入的位置开始循环遍历所有数组元素。

示例:

//Array: [0, 1, 2]
Input: 0 Output: 012
Input: 1 Output: 120
Input: 2 Output: 201

我对PHP了解不多,所以我尝试了一个简单的for循环:

for($x = 1; $x <= 2; $x++)
{
    echo $x;
}

但显然这不起作用,所以我被困在了我必须要去的地方。

所以您想要做的是创建一个ArrayIterator

然后使用ArrayIterator::seek()设置迭代器的位置,具体取决于您获得的输入。使用array_search():可以轻松获得位置

$it->seek(array_search($input, $arr));

(如果在数组中找不到输入array_search(),则简单地返回FALSE,然后将其用作0,这意味着您只需循环遍历数组)

然后,您可以简单地使用从设置位置开始的for循环遍历数组中的元素数量。如果你击中了阵列的末端,你只需倒带:

//End of array?
if(!$it->valid()){
    //Start again
    $it->rewind();
}

代码

<?php
    $arr = [0, 1, 2];
    $input = 1;
    $it = new ArrayIterator($arr);
    $it->seek(array_search($input, $arr));
    for($i = 0, $length = count($arr); $i < $length; $i++){
        if(!$it->valid()){
            $it->rewind();
        }
        echo $it->current();
        $it->next();
    }
?>

输出:

120
foreach( [1,2,0] as $num ){
    echo $num;
}