【问题标题】:looping through an object twice - php循环遍历一个对象两次 - php
【发布时间】:2012-07-05 19:19:42
【问题描述】:

我正在玩一个 zencart,试图让它做我想做的事,但我已经没有什么想法可以谷歌了。

当我使用 zencart 函数查询数据库时,软件会返回一个如下所示的对象:

queryFactoryResult Object
(
[is_cached] => 
[resource] => Resource id #117
[cursor] => 11
[EOF] => 
[fields] => Array
    (
        [products_id] => 5582
        [products_description] => description here
        [products_name] => Lucky magnet – Each petal...
        [products_type] => 1
        [products_quantity] => 0
        [products_image] => EachPetalMag.jpg
        [products_price] => 3.4000
        [products_status] => 1
        [products_ordered] => 14
        [master_categories_id] => 21
        [supplier_id] => 7
    )
)

我必须循环一次以计算有多少 master_categories ,然后我才能做其他事情:

while (!$products->EOF) {
  $products_count++;
  $supcats[$products->fields['master_categories_id']] = $products->fields['master_categories_id'];
  $products->MoveNext();
}

然后我需要使用上面的 while 循环再次循环对象,我已经尝试过:

reset($products); 

$products->EOF = FALSE;

但它们不起作用。有没有办法做到这一点而不必再次发送查询?

【问题讨论】:

  • 您是否尝试过将数据存储在一个数组中并第二次循环该数组?例如,PDO 无法回退结果集光标。
  • 您可以单步执行数据 - 计算 master_categories 的数量,然后按照 @rodneyrehm 的建议将数据复制到数组中。
  • ZenCart 没有在不重新查询或将信息存储在数组中的情况下将指针设置回起点的功能。必须有一种更好的方法来编写不需要多次循环遍历结果集的逻辑。
  • 谢谢大家,我刚在第一次循环时制作了数组,不知道为什么我没有想到这一点。哦!谢谢:)

标签: php zen-cart


【解决方案1】:

Zen Cart queryFactoryResult 上的常规类数组操作不起作用,因为它不是数组,所以这不起作用:

reset($products);

要再次循环变量,请使用 queryFactoryResult->Move(row_number) 方法:

$products->Move(0);

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2020-06-09
    • 2014-06-18
    相关资源
    最近更新 更多