我需要在我的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查询。
在写这篇文章时,我发现了一种在同一循环中执行所有处理的方法,但是仍然想知道最好的方法是什么。
答案 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
希望有所帮助。