2016-04-28 90 views
3

我討厭成爲「那些傢伙」之一 - 我很確定答案在我面前是正確的,我根本無法理解它。不過,在過去的幾個小時裏,我已經嘗試過在我們的朋友Google先生的幫助下解決這個問題,但無濟於事。基本的PHP數組迭代問題

我所試圖做的是相當簡單:

  1. 推一根繩子到一個數組。
  2. 通過數組中的條目X計算偏移量,並將結果值作爲變量返回。

我所有的勞動,我剛纔這一點:

$newarray = array(1,2,3,4,7,5,8,6,9); 

我希望能算(例如)開始,按可變數量的3號,增量(例如,12)以循環的方式進行。這會使計數結束於數字5.然後,我希望將該數字(5)存儲在一個變量中,以便在頁面的其餘部分使用。

同樣,我知道這應該是基本的,但無論出於什麼原因,我似乎無法弄清楚。非常感謝您的幫助。

+1

嘗試迭代器http://php.net/manual/pl/class.iterator.php –

+2

您的試用代碼在哪裏? – Thamilan

+2

請您詳細說明預期的行爲?對我而言,目前還不清楚迭代應該完成什麼。 – k0pernikus

回答

2

這裏是的方式之一:

  1. 所需元件的位置改變到第一位置
  2. 最後,選擇哪些您通過陣列的循環後希望的元素。

PHP代碼:

<?php 
function circulateArr($key, $arr) 
{ 
    foreach($arr as $arrkey => $value) 
    { 
     if($arrkey != $key) 
     { 
      $elm = array_shift($arr); 
      array_push($arr, $elm); 
     } 
     else 
     { 
      break; 
     } 
    } 
    return $arr; 
} 


$array = array(1,2,3,4,5,6,7,8,9); 
$start = 3; 
$roundRobin = 12; 

$arr = circulateArr(array_search($start, $array), $array); //Repositioning the array 

echo $elementChose = $arr[($roundRobin%count($arr))-1]; //Get the array element 

輸出:

+0

不幸的是,我無法得到這段代碼運行。 :( –

+0

我相信它現在有效...給我幾個來仔細檢查,如果事實證明是正確的我會標記你的答案。 –

+1

你先生是男人之間的神 - 非常感謝你的幫助,還有新的學習材料! –

0

對於您的電話號碼1,您需要使用array_push():http://php.net/manual/en/function.array-push.php

下面是一個例子:

<?php 
$stack = array("orange", "banana"); 
array_push($stack, "apple", "raspberry"); 
print_r($stack); 
?> 

這將顯示

Array 
(
[0] => orange 
[1] => banana 
[2] => apple 
[3] => raspberry 
) 

你的電話號碼2.您可以使用一個簡單的for循環是這樣的:

for($i = 0; $i< $stack.count(); $i++){ 
    $tmp = $stack[$i]; 
    //tmp will be the value at that location do what you will with it 
} 

對於抵消,只需將$ i設置爲您的抵消額

for($i = $offset; $i < $stack.count(); $i++){ 
    $tmp = $stack[$i]; 
    //tmp will be the value at that location do what you will with it 
} 
+0

對不起,我希望從這樣的循環中返回的值將是數組中計數結束的數字,而不是數組中的所有值。 作爲一個例子,我希望PHP能夠與數組一起玩inne menni miny mo,並捕獲最後一次迭代的值。所以在上面的例子中,我想讓PHP通過水果數組值計算五次,偏移量爲1.所以我們將從香蕉開始,並通過數組計數五,這將使我們在蘋果。我希望代碼將「apple」存儲爲可用於頁面其餘部分的變量。 –

+0

@JohnDoe這些數字1和5是否改變?如果是這樣如何? – nerdlyist

+0

他們做了改變。數字1是偏移量,是基於每個人的基礎上計算的,並且基於一個人出生的一週中的某一天進行改變,數字5代表該人的年齡。 –

0

1)推入一個字符串數組,可以用array_push完成。

2)通過數組中的條目計算X次偏移量,並將結果值作爲變量返回,這有點複雜。我們可以使用count()並添加1來獲取數組中的元素數量,並使用PHP模數運算符計算序數鍵偏移量。如果數組尚未使用序數值鍵入,array_value()將使用序數價值爲我們。然後我們只是返回值。

下面是一小段代碼,它將它們一起拉到你身邊。

<?php 
    $myArray = array(1,2,3,4,7,5,8,6); 
    array_push($myArray,'9'); 
    $start=3; 
    $increment=12; 

    echo roundRobbinArrayValue($myArray,$start+$increment)."\n"; 

    function roundRobbinArrayValue($myArray,$pointer){ 
     $ordinalArray=array_values($myArray); 
     $numberOfItems=count($ordinalArray)+1; 
     $newPointer= $pointer % $numberOfItems; 
     return $ordinalArray[$newPointer];  
    } 
    ?>