2016-04-28 131 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];  
    } 
    ?>