Php 使这个Magento嵌套循环更好

Php 使这个Magento嵌套循环更好,php,magento,foreach,nested-loops,Php,Magento,Foreach,Nested Loops,我正试图在Magento商店中找到所有的商店。所有商店,我指的是所有网站上的所有商店。我写了这段代码,它可以工作,但我有点担心嵌套foreach循环的复杂性。请看一下,如果你认为我可以做些不同的事情,请告诉我 public function getAllStoresCustom(){ $all_stores = array(); foreach (Mage::app()->getWebsites() as $website) { fore

我正试图在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中找到了这些函数,所以我想我必须使用它们,而这似乎是唯一有效的组合

非常感谢

试试这个:

$allStores = Mage::getModel('core/store')->getCollection();
然后在需要时循环使用
$allStores

foreach ($allStores as $store) {
   //do something with $store
}
注意:您将获得一个id为
0
的商店。这是管理商店视图。如果希望所有商店都不显示“管理商店”视图,请使用以下选项:

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

$allStores = Mage::getModel('core/store')->getCollection();
然后在需要时循环使用
$allStores

foreach ($allStores as $store) {
   //do something with $store
}
注意:您将获得一个id为
0
的商店。这是管理商店视图。如果希望所有商店都不显示“管理商店”视图,请使用以下选项:

$allStores = Mage::getModel('core/store')->getCollection()->setWithoutDefaultFilter()
foreach()。如果要优化某些内容,请查看
getStores()
getGroups()
函数的代码,因为这些函数在迭代中被调用,而
getWebsites()
只被调用一次

如果您需要更多的指导,请随时用这些功能的内容更新您的问题

您可能还想尝试更多有经验的意见,特别是因为您没有任何特定的编程问题/错误=)

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

如果您需要更多的指导,请随时用这些功能的内容更新您的问题


您可能还想尝试更多有经验的意见,特别是因为您没有任何特定的编程问题/error=)

如果在大数据集上不必要地使用,每个循环都可能是一个问题;)。但在这种情况下,这看起来不会是一个问题,尽管可能有一个更直接的函数Mage@cypherabe你是绝对正确的,但是如果没有更多的OP上下文,我们都只是猜测=)好的,我通常考虑嵌套的foreach循环。结果,@Marius提出了一个更好的Magento函数,它完全消除了循环。但是,是否有一些通用规则可以帮助避免嵌套循环?谢谢如果你问起“高效PHP循环”之类的问题,我相信你会在谷歌上找到很多建议。下面是我发现的一些:请确保查看名为
passbyreference
的内容来回答您的问题,通过使用连接正确地查询数据库,通常可以避免嵌套的PHP循环。如果您感兴趣,我会帮助一个人执行加入。如果在大数据集上不必要地使用,则每个循环都可能成为问题;)。但在这种情况下,这看起来不会是一个问题,尽管可能有一个更直接的函数Mage@cypherabe你是绝对正确的,但是如果没有更多的OP上下文,我们都只是猜测=)好的,我通常考虑嵌套的foreach循环。结果,@Marius提出了一个更好的Magento函数,它完全消除了循环。但是,是否有一些通用规则可以帮助避免嵌套循环?谢谢如果你问起“高效PHP循环”之类的问题,我相信你会在谷歌上找到很多建议。下面是我发现的一些:请确保查看名为
passbyreference
的内容来回答您的问题,通过使用连接正确地查询数据库,通常可以避免嵌套的PHP循环。如果你感兴趣的话,我帮一个家伙加入了。谢谢,这样做很有效,消除了我的循环!我想这个“集合”以某种方式连接到Magento EAV模型?我可能必须阅读Alan Storm关于这方面的文章。
存储
对象不是EAV。一个集合基本上就是一个对象列表。谢谢,这确实有效,并且消除了我的循环!我想这个“集合”以某种方式连接到Magento EAV模型?我可能必须阅读Alan Storm关于这方面的文章。
存储
对象不是EAV。集合基本上是一个对象列表。