是否可以为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);
}
答案 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);