2012-12-10 53 views
1

我想告诉我的数组从键位置2开始,然后遍历整个数组,包括键位置2之前的值。我只想使用一个数组并指定键我从头开始循环。例如,在这里我使用的是array_splice,但它没有做到我想要的,你能帮助我吗?PHP使阵列从键/位置开始

$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

所以你不想使用'foreach'而是'for' –

回答

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内缠绕。

+0

这是现货,谢谢! :) –

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;