我想告诉我的数组从键位置2开始,然后遍历整个数组,包括键位置2之前的值。我只想使用一个数组并指定我开始循环的键位置。例如,我在这里使用的是array_splice,但它没有按照我的意愿行事,你能帮帮我吗?
$names = array('Bill', 'Ben', 'Bert', 'Ernie');
foreach(array_slice($names, 2) as $name){
echo $name;
}
foreach(array_slice($names, 3) as $name){
echo $name;
}
答案 0 :(得分:3)
如果键不相关,可以将数组拼接两次,然后合并生成的数组,如下所示:
$names = array('Bill', 'Ben', 'Bert', 'Ernie');
$start = 2;
foreach( array_merge( array_slice($names, $start), array_slice( $names, 0, $start)) as $name){
echo $name;
}
你可以从the demo看到这打印:
BertErnieBillBen
或者,为了提高效率,您可以使用两个知道包装到开头的循环,这将更有效,因为您在原始数组上操作而不是创建它的副本。
$start = 2;
for( $i = $start, $count = count( $names); $i < $count; $i++) {
echo $names[$i];
}
$i = 0;
while( $i < $start) {
echo $names[$i++];
}
你也可以把它变成一个单循环,然后封装逻辑以包裹在for
内。
答案 1 :(得分:0)
$limit = 2; //so you can set your start index to an arbitrary number
$fn= function($a,$b) use ($limit){
if(($a < $limit && $b < $limit)
|| ($a >= $limit && $b >=$limit)) //$a and $b on the same side of $limit
return $a < $b ? -1 : ($a==$b ? 0 : 1);
if($a < $limit && $b > $limit) return 1; //because $a will always be considered greater
if($a >= $limit && $b < $limit) return -1; //because $b will always be considered greater
};
uksort($arr, $fn);
foreach($arr as $v) echo $v;