2013-05-17 41 views
2

我希望能夠通過使用數字鍵檢索數組的值。問題是,如果鍵超出了數組長度,我需要它再次遍歷數組。如何在索引落後時在PHP數組中進行換行?

$my_array = array('zero','one','two','three','four','five','six','seven'); 
function loopArrayValues($array,$key){ 
    //this is what is needed to return 
    return 
} 
echo "Key 2 is ".loopArrayValues($my_array,2)."<br />"; 
echo "Key 11 is ".loopArrayValues($my_array,11)."<br />"; 
echo "Key 150 is ".loopArrayValues($my_array,11)."<br />"; 

預期輸出:

Key 2 is two 
Key 11 is three 
Key 150 is three 

我研究的參考資料:

我生成的功能:

function loopArrayValues($array,$key){ 
    $infinate = new InfiniteIterator(new ArrayIterator($array)); 
    foreach(new LimitIterator($infinate,1,$key) as $value){ 
    $return=$value; 
    } 
    return $return; 
} 

該函數的工作原理,但我有一個問題:這是獲得預期結果的好方法嗎?

+2

你的意思是,如果鍵掉到數組的末尾,它應該再次環繞?那麼,最後加上一個就是開始?如果是這樣,就像'$ my_array [$ key%count($ my_array)]'? – halfer

+0

@billyonecan固定,抱歉複製粘貼代碼,而不是數組。陣列中的第一個值是'零' – amaster

+0

@ amaster507無需道歉,我只是確保我沒有錯過任何東西。我仍然不明白爲什麼,如果傳遞的鍵大於數組長度,它會返回三。你能否詳細說明邏輯? – billyonecan

回答

6

你太複雜了,除非你真的想處理數組中的元素,因爲它很貴,所以你不想迭代它們。我想你只需要的元素數量的模量陣列中,像這樣: -

$my_array = array('zero', 'one','two','three','four','five','six','seven'); 

function loopArrayValues(array $array, $position) 
{ 
    return $array[$position % count($array)]; 
} 

for($i = 0; $i <= 100; $i++){ 
    echo "Position $i is " . loopArrayValues($my_array, $i) . "<br/>"; 
} 

輸出繼電器: -

Position 0 is zero 
Position 1 is one 
Position 2 is two 
Position 3 is three 
Position 4 is four 
Position 5 is five 
Position 6 is six 
Position 7 is seven 
Position 8 is zero 
Position 9 is one 
Position 10 is two 
Position 11 is three 
Position 12 is four 
Position 13 is five 

等等

+0

@halfer和@ vascowhite,謝謝!我總是試圖讓事情過度複雜化。 – amaster

+0

如果你循環結束數組,那麼這很有效,但如果你循環開始,則不會。我知道OP沒有問,但其他人可能會感興趣。 –

相關問題