2015-02-23 74 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; 
} 

?> 
相關問題