如何在php中使用数组中的循环方法?

时间:2015-02-25 08:49:22

标签: php arrays

您好我正在尝试从array.i.e创建一个子数组;我想我有一个如下所示的数组

 $array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}

爆炸并将其分配给变量$ i .. 并运行for循环,如下所示..

for ( $i=0;$i<count($array);$i++) {
    $a = array();
    $b = $array[$i];
    for($j=0;$j<count($array);$j++){
        if($b != $array[$j]){

            $a[] = $array[$j];
        }
    }

我想要的输出是

$i = 1 

数组应该是

{2,3,4,5,6,7,8,9,10,11} 

以及何时

$i = 2 

数组应该是

{3,4,5,6,7,8,9,10,11,12}

同样

$i=19

数组应该是

{1,2,3,4,5,6,7,8,9,10}

所以我该怎么办呢。

6 个答案:

答案 0 :(得分:5)

假设$i应该是偏移而不是数组中的实际值,你可以做

$fullArray = range(1, 19);

$i = 19;
$valuesToReturn = 10;

$subset = iterator_to_array(
    new LimitIterator(
      new InfiniteIterator(
        new ArrayIterator($fullArray)
      ),
      $i,
      $valuesToReturn
   )
);

print_r($subset);

这将提供您想要的输出,例如

$i = 1 will give 2 to 11
$i = 2 will give 3 to 12
…
$i = 10 will give 11 to 1
$i = 11 will give 12 to 2
…
$i = 19 will give 1 to 10
$i = 20 will give the same as $i = 1 again

等等。

答案 1 :(得分:2)

for ($i = 0; $i < count($array); $i++) {
    if ($i + 10 < count($array))
        $a = array_slice($array, $i, 10);
    else
        $a = array_merge(array_slice($array, $i), array_slice($array, 0, 10-(count($array)-$i)));

    // do something with $a before it is over-written on the next iteration
}

这个测试:

<?php
$array = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19);

for ($i = 0; $i < count($array); $i++) {
    if ($i + 10 < count($array))
        $a = array_slice($array, $i, 10);
    else
        $a = array_merge(array_slice($array, $i), array_slice($array, 0, 10-(count($array)-$i)));

    echo "<h2>$i</h2>\n<pre>".print_r($a,true)."</pre><br />\n";
}

导致:

0

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 10
)
...
9

Array
(
    [0] => 10
    [1] => 11
    [2] => 12
    [3] => 13
    [4] => 14
    [5] => 15
    [6] => 16
    [7] => 17
    [8] => 18
    [9] => 19
)

10

Array
(
    [0] => 11
    [1] => 12
    [2] => 13
    [3] => 14
    [4] => 15
    [5] => 16
    [6] => 17
    [7] => 18
    [8] => 19
    [9] => 1
)
...
18

Array
(
    [0] => 19
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 8
    [9] => 9
)

答案 2 :(得分:2)

从我的结尾可以正常使用

<?php
    $array = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19);

    $size = sizeof($array); // Defining the array size

    $str = 17; // This is the reference value from which you have to extract the values

    $key = array_search($str, $array);

    $key = $key+1; // in order to skip the given reference value
    $start = $key%$size;

    $end = $start+9;

    for($i=$start; $i<=$end; $i++) {
        $j = ($i%$size);
        $result[] = $array[$j];
    }

    echo '<pre>'; print_r($result);


?>

答案 3 :(得分:2)

$array = range(1, 19);

$i = 19;
$result = array();
$after = array_slice($array, $i, 10);
$before = array_slice($array, 0, 10 - count($after));
$result = array_merge($after, $before);

var_dump(json_encode($result));

P.S。请注意0​​元素有1个值,依此类推......

答案 4 :(得分:1)

看起来你需要的只是一个来自数组的特定大小的切片,切片包围数组的结尾并从头开始继续。它将数组视为循环列表。

你可以通过多种方式实现这一点,其中最简单的(就代码行而言)是通过在其末尾附加一个副本来扩展原始数组,并使用PHP函数array_slice()来提取你需要的切片:

function getWrappedSlice(array $array, $start, $count = 10)
{
    return array_slice(array_merge($array, $array), $start, $count);
}

当然,您必须确保$start介于0count($array) - 1之间(包括),否则函数返回的值将不符合您的预期。< / p>

答案 5 :(得分:1)

阵列上的循环可以通过在每次迭代中执行“旋转”操作来实现:

for ($i = 0; $i < count($array); ++$i) {
    // rotate the array (left)
    array_push($array, array_shift($array));
    // use $array
}

在循环期间,数组的第一个元素放在后面。在循环结束时,数组将恢复为原始值。