从循环内部向foreach循环添加新值

时间:2013-11-28 20:02:29

标签: php

是否可以为foreach正在使用的数组添加新值?因此它将运行(n + x),其中n是foreach开始之前数组元素的数量,x是添加到数组中的元素数。 是的,我测试了..看起来没有..所以我想知道我是否可以为这项工作做点什么。

foreach($pages_to_visit as $key => $source){
    global $products;
    $links = baixarSource($source);

    foreach($links as $link){
        global $products;
        global $pages_to_visit;

        if(preg_match("/somestore\.com/i", $link)){
                if(!in_array($link, $pages_to_visit)){
                        $pages_to_visit[] = $link;
                }else if(preg_match("/\/produto\//i", $link) && !in_array($link, $products)){
                        $products[] = $link;
                        echo $link."\n";
                }
        }
    }
    unset($pages_to_visit[$key]);
    sleep(0.2);
}

3 个答案:

答案 0 :(得分:2)

正如您已经想到的那样,使用foreach()是不可能的,但是当您使用for()时,任务变得非常简单:

for ($i=0; $i<count($array); $i++) {
    //code
}

这是由于在每次迭代之前(重新)计算count($array)。您还可以使用自己递增的变量(递增比计算数组更容易)

$max = count($array);
for ($i=0; $i<$max; $i++) {
    //code
    //when push an element just do $max++;
}

当然这只适用于数字指数,但这似乎就是这种情况。

答案 1 :(得分:2)

如果要在foreach中修改数组本身,则需要在foreach代码中指定“runner”变量作为引用。

http://us2.php.net/manual/en/control-structures.foreach.php

  

为了能够直接修改循环中的数组元素,在$ value之前加上&amp ;.在这种情况下,该值将通过引用分配。

示例(仅计为9):

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

foreach ($arr as $blubb)
{
    if ($makeArrayLonger)
    {
        $arr[] = 10;
        $makeArrayLonger = false;
    }

    echo $blubb;
}

示例2(这次使用从foreach中添加的附加元素计数到10):

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

foreach ($arr as &$blubb)
{
    if ($makeArrayLonger)
    {
        $arr[] = 10;
        $makeArrayLonger = false;
    }

    echo $blubb;
}

答案 2 :(得分:0)

不确定我的问题是否正确......我认为你尝试做的事情在任何方面都没有多大意义。

echo $countBefore = count($data);
foreach ($data $as $value) {
    $data[] = 'Some new value';
}
echo $countAfter = count($data);