0

我需要在我的 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 查询。

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

4

1 回答 1

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,使用如下:

$iterator = $arrayobject->getIterator();

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

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

希望有帮助。

于 2013-07-12T00:53:30.557 回答