所以我有一个这样的数组:
$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;
}