【问题标题】:Make this Magento nested loop better让这个 Magento 嵌套循环更好
【发布时间】:2014-03-05 00:09:48
【问题描述】:

我正在尝试在 Magento 商店中获取所有商店。所有商店,我的意思是来自所有网站的所有商店。我编写了这段代码,它可以工作,但我有点担心嵌套 foreach 循环的复杂性。如果您认为我可以做一些不同的事情,请看一下并告诉我。

public function getAllStoresCustom(){

    $all_stores = array();

        foreach (Mage::app()->getWebsites() as $website) {
            foreach ($website->getGroups() as $group) {
                $all_stores [] = $group->getStores();      
            }
        }

    return $all_stores;
}

我只在 Magento 中找到了这些功能,所以我认为我必须使用这些功能,而这似乎是唯一有效的组合。

非常感谢

【问题讨论】:

    标签: php magento foreach nested-loops


    【解决方案1】:

    foreach() 是一个非常高效的 PHP 函数,因此您可以打赌它不会让您的速度变慢。如果您希望优化某些内容,请查看 getStores()getGroups() 函数的代码,因为它们在迭代中被调用,而 getWebsites() 只被调用一次。

    如果您需要更多指导,请随时使用这些函数的内容更新您的问题。

    您可能还想尝试https://codereview.stackexchange.com/ 以获得更有经验的意见,尤其是因为您没有任何特定的编程问题/错误 =)

    【讨论】:

    • 如果在大型数据集上不必要地使用,每个循环都可能成为问题;)。但在这种情况下,它看起来不会有问题,尽管 Mage 可能有更直接的功能
    • @cypherabe 你是绝对正确的,但如果没有来自 OP 的更多上下文,我们都只是在猜测 =)
    • 好的,我在考虑一般的嵌套 foreach 循环。事实证明,@Marius 提出了一个更好的 Magento 函数,它完全消除了循环。但是,是否有一些通用规则有助于避免嵌套循环?谢谢
    • 如果您询问“高效 PHP 循环”之类的问题,我相信您会通过 Google 找到很多建议。我在这里找到了一些:phpdreams.com/blog-posts/best-practice-array-loops.htmlstackoverflow.com/questions/12847502/…stackoverflow.com/questions/1742215/…stackoverflow.com/questions/3307409/…,并确保查看名为pass by reference的东西
    • 不过,要回答您的问题,您通常可以通过使用 JOIN 正确查询数据库来避免嵌套的 PHP 循环。如果您有兴趣,我帮助一个人在 this SO question 中执行了 JOIN。
    【解决方案2】:

    试试这个:

    $allStores = Mage::getModel('core/store')->getCollection();
    

    然后在需要时循环通过$allStores

    foreach ($allStores as $store) {
       //do something with $store
    }
    

    注意:您将获得一个 ID 为 0 的商店。那是管理商店视图。如果您希望所有商店都没有管理员商店视图,请使用:

    $allStores = Mage::getModel('core/store')->getCollection()->setWithoutDefaultFilter()
    

    【讨论】:

    • 谢谢,这确实有效,它消除了我的循环!我想这个“集合”以某种方式连接到 Magento EAV 模型?我可能不得不阅读 Alan Storm 的文章。
    • stores 对象不是 EAV。集合基本上是一个对象列表。
    猜你喜欢
    • 2015-04-24
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2018-04-15
    • 2020-06-07
    • 2012-08-12
    相关资源
    最近更新 更多