在相同的数据上执行两个foreach循环

时间:2013-07-12 00:48:29

标签: php loops foreach

我需要在我的php中迭代从mssql数据库中提取的数据两次,但我发现当我执行第一个foreach循环时,数组随后会被列为空,因为数组指针已遍历整个数组。

本质上我有这个:

$rstGold = $rstGold2 = getFeatured();

foreach($rstGold as $store){
//proccessing here
}

foreach($rstGold2 as $store){
//proccessing here
}

get features是一个使用mssql-PDO驱动程序返回结果的SQL查询。

function getFeatured(){
             global $db, $debug;

             $query = //sql query

             return $db->query($query);
}

我需要一种方法来迭代getFeatured()的结果两次,它们保持相同的顺序。我的sql查询随机化结果,所以我不能执行第二次SQL查询。

在写这篇文章时,我发现了一种在同一循环中执行所有处理的方法,但是仍然想知道最好的方法是什么。

1 个答案:

答案 0 :(得分:2)

根据文档使用ArrayIterator

  

当您想要多次迭代同一个数组时,您需要   实例化ArrayObject并让它创建ArrayIterator实例   通过使用foreach或通过调用它来引用它   手动获取getIterator()方法。

示例如下:

<?php
$fruits = array(
    "apple" => "yummy",
    "orange" => "ah ya, nice",
    "grape" => "wow, I love it!",
    "plum" => "nah, not me"
);
$obj = new ArrayObject( $fruits );
$it = $obj->getIterator();

// How many items are we iterating over?

echo "Iterating over: " . $obj->count() . " values\n";

// Iterate over the values in the ArrayObject:
while( $it->valid() )
{
    echo $it->key() . "=" . $it->current() . "\n";
    $it->next();
}

// The good thing here is that it can be iterated with foreach loop

foreach ($it as $key=>$val)
echo $key.":".$val."\n";

该课程还有一个名为rewind的{​​{3}},使用方法如下:

$iterator = $arrayobject->getIterator();

$iterator->next();
echo $iterator->key(); //1

$iterator->rewind(); //rewinding to the begining

希望有所帮助。