Php 如何从任何位置开始循环遍历整个阵列?

Php 如何从任何位置开始循环遍历整个阵列?,php,arrays,Php,Arrays,我有一个这样的数组: $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; } fo

我有一个这样的数组:

$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;
}

for($x=1;$x所以您要做的是创建一个

然后根据您获得的输入设置迭代器的位置。您可以通过以下方法轻松获得位置:

(如果在数组
array\u search()
中找不到输入,则返回FALSE,然后将其用作0,这意味着您只需在数组中循环)

然后,您可以简单地从设置的位置开始使用for循环遍历数组中的元素数量。如果到达数组的末尾,您只需倒带它:

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


你不能从一个简单的循环中得到120,只有012或210。为什么,如果你从1开始到0,你会期望看到120?这个问题没有意义。@user9937如果你想得到答案,你必须提供更多信息。这是一个奇怪的请求,你可能必须硬编码该行为。一个简单的循环不能没有1,2,0一些非常奇怪的逻辑。
if($userPick==0){echo 012;}
etc@Rizier123刚刚意识到OP更新了这个问题,现在它与他或她关于输入2应该发生什么的评论相冲突。你的答案很好;+1来自我。我已经用两个for循环解决了这个问题,一个显示12,第二个循环只显示零,并传递我所做的函数。谢谢“帮助”。@user9937不客气。您的第一个问题非常模糊,因此我建议您查看。此外,您随后提供了一条有用的评论,澄清了问题,但通过编辑将有关您的问题的信息添加到问题中。另请参阅:只是为了澄清最后的困惑。(顺便说一句:要快速了解网站概况,请参阅)
$it->seek(array_search($input, $arr));
//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