2015-02-23 78 views
2

如果我有以下几点:有没有从第二个索引开始foreach的优雅方法,然后完成剩下的工作?

$a = array(
    "one" => 1, 
    "two" => 2, 
    "three" => 3, 
    "seventeen" => 17 
); 

foreach ($a as $v) { 
    echo $v; 
} 

我怎样才能使输出:

2, 1, 3, 17 
+0

是否有这样做的一个很好的目的是什么?为什么不按照你想要的顺序声明数组? – wallyk 2015-02-23 20:09:34

+0

这是我从数据库查询中获得的顺序。嗯,也许我应该问在MySQL部分? – rotaercz 2015-02-23 20:46:29

+2

什么*订购规则*会根据需要订购产品? - 除了“如果价值是'两'”,我看不到一个。“没有规则,没有排序.. – user2864740 2015-02-23 21:07:28

回答

2

引述PHP Manual on Language Operators

+运算返回附加到左手 阵列右手阵列;对于这两个数组中存在的键,将使用左手阵列中的元素,而右边数组中的匹配元素将被忽略。

$a = array(
    "one" => 1, 
    "two" => 2, 
    "three" => 3, 
    "seventeen" => 17 
); 

$b = array_values($a); 
echo implode(', ', array($b[1], $b[0]) + $b), PHP_EOL; 

输出:

2, 1, 3, 17 
+0

我喜欢这种简单性,但是,+ $ b可能应该是+ array_slice($ b,2),否则它会把2,1,2,1,3,17。 – Xeridea 2015-02-23 21:47:49

+0

非常感谢,它不会。在PHP中添加数组时,任何已存在于左侧数组中的右键都将被忽略。显示的输出是您运行代码时将获得的结果。这有点奇怪,但嘿,它毕竟是PHP ...:P – mhall 2015-02-23 21:55:29

+0

它的工作原理,我喜欢PHP阅读手册时可以做这些有趣的事情。有大量的阵列功能可以让他们毫不费力地工作。 – Xeridea 2015-02-23 22:00:20

1
$values = array_values($a); 
echo "{$values[1]}, {$values[0]}, " 
foreach (array_slice($values, 2) as $v){ 
    echo "$v, " 
} 

如果你关心最后一个逗号......

$values = array_values($a); 
echo "{$values[1]}, {$values[0]}, " 
$lastIndex = count($values) - 1; 

foreach (array_slice($values, 2) as $k => $v){ 
    echo $v; 
    if ($k != $lastIndex){ 
     echo ", "; 
    } 
} 
0

你可以可能是这样做的:

<?php 

$my_array = array(...); 

$keys = array_keys($my_array); 
$second_key = $keys[1]; // if your array can be whatever size, probably want to check that first 

echo $my_array[$second_key]; 

foreach ($my_array as $key => $value) { 
    if ($key == $second_key) { 
    continue; 
    } 

    echo $value; 
} 

?> 
相关问题