gpt4 book ai didi

php - 加载后对 Magento 集合进行排序

转载 作者:可可西里 更新时间:2023-11-01 13:06:39 26 4
gpt4 key购买 nike

Magento 集合排序函数(例如 Mage_Eav_Model_Entity_Collection_Abstract::addAttributeToSort)通过向 SQL 选择语句添加 ORDER BY 子句来工作。但是,有时集合已经加载并且需要对集合进行排序。

当然可以使用 toArray($fields) 函数,然后使用 PHP 数组排序函数( native 或用户定义的),但是这有点笨拙。这也意味着集合中的对象被转换为“哑”值行,没有魔法 getter/setter,可以/正在用算法等实现。

我想知道是否有更优雅/Magento 风格的集合排序方法。

谢谢,
乔纳森

最佳答案

没有正确的方法来做到这一点。但我认为使用反射是可能的。您可以检索集合对象的 $_items 属性,对它们进行排序并将其设置回集合。

function sortCollection(Varien_Data_Collection $collection, callable $sorter) {
$collectionReflection = new ReflectionObject($collection);
$itemsPropertyReflection = $collectionReflection->getProperty('_items');
$itemsPropertyReflection->setAccessible(true); // Make it accessible

$collectionItems = $itemsPropertyReflection->getValue($collection);

usort($collectionItems, $sorter);

$itemsPropertyReflection->setValue($collection, $collectionItems);

$itemsPropertyReflection->setAccessible(false); // Return restriction back

return $collection;
}

关于php - 加载后对 Magento 集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5673093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com