基本的 PHP 数组迭代问题


Basic PHP Array Iteration Issue

我讨厌成为"那些家伙"中的一员 - 我非常确定答案就在我面前,我根本无法理解它。然而,在过去的几个小时里,我试图在我们的朋友谷歌先生的帮助下解决这个问题,但无济于事。

我想做的很简单:

  1. 将字符串推送到数组。
  2. 使用偏移量对数组中的条目进行 X 次计数,并将结果值作为变量返回。

对于我所有的劳动,我只有这个:

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

我希望能够从数字 3 开始计数(例如),以循环方式递增一个可变数字(例如 12)。这将使计数的末尾为数字 5。然后我想把这个数字(5)存储在一个变量中,以便在页面的其余部分使用。

同样,我知道这应该是基本的,但无论出于何种原因,我似乎都无法弄清楚。非常感谢您的帮助。

这是方法之一:

  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

输出:

5

对于你的数字 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
}

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];      
    }  
    ?>