gpt4 book ai didi

PHP - 相当于 array_slice() 的对象;

转载 作者:可可西里 更新时间:2023-11-01 12:52:09 24 4
gpt4 key购买 nike

我正在尝试删除对象中的前两项。例如,如果我想从数组中删除前两项,我会使用 array_slice($arrayName, 2)。

我已经在我的对象上试过了(嘿,为什么不呢?我知道它在技术上不是一个数组,但我很乐观)但它没有用。

在搜索这个时,我只找到了从数组中删除项目的方法。

    $categories = array_slice(Mage::getModel('catalog/category')->getCollection()->addAttributeToSelect('*'), 2);


foreach($categories as $category){
echo "<div class='col'>{$category->getName()}</div>";
}

在上面的示例中,我想在通过 foreach 循环运行它之前从 $categories(即“根类别”和“默认”)对象中删除前两个类别。解决这个问题的最佳方法是什么?我知道我能做到;

if($category->getName() != 'Root Category' && $category->getName() != 'Default'){
echo $category->getName();
}

但这感觉像是一个肮脏的解决方案。

编辑

看了Patrick Q的评论,才知道这确实是一个对象数组。所以我现在的问题是,为什么将 array_slice 应用于此数组时,会导致空白屏幕?当不应用 array_slice 时,循环工作正常。

编辑2

忽略最后的编辑。它是一个对象。

至于可能的重复,虽然这个问题(有问题)确实帮助我解决了我的问题,但我认为,它们本质上是不同的问题。这个问题的核心是围绕为对象寻找 array_slice() 的有用替代方案。另一方面,问题是想找到一种方法,特别是根据下拉属性过滤 Magento 集合。虽然他们可能到达了同一个目的地,但目的和旅程却截然不同。

最佳答案

据我所知,Magento 中不存在该功能。

I'm trying to remove the first two items in an Object (emphasis mine)

默认情况下,PHP 对象不会像数组一样工作。对于对象具有第一项、第二项或第三项意味着什么,PHP 没有内部概念。

之所以可以foreachcount 一个Magento 集合对象就好像它是一个数组一样,是因为基础集合对象实现了PHP 标准库中的特殊接口(interface)——IteratorAggregateCountable

#File: lib/Varien/Data/Collection.php
class Varien_Data_Collection implements IteratorAggregate, Countable
{
}

通过实现这些接口(interface),(通过根据上面的手动链接在 Varien_Data_Collection 中定义方法)对象获得 foreachcount() 功能.

Magento 的 IteratorAggregate 实现(为您提供 foreach 功能的东西)依赖于 PHP 的内置 ArrayIterator

#File: lib/Varien/Data/Collection.php
class Varien_Data_Collection implements IteratorAggregate, Countable
{
public function getIterator()
{
$this->load();
return new ArrayIterator($this->_items);
}
}

ArrayIterator 类创建的对象有 no built in slice functionality 。这是有道理的——从概念上讲,behind an iterator 的想法是它允许您遍历列表而无需立即将整个底层列表加载到内存中。 Magento 和 PHP 的基本迭代器与已经加载的数组一起工作,这在 OO PHP 中有点常见的冗余。

因此,如果您想将 slice 与 Magento 集合对象一起使用,我会尝试底层迭代器的 getArrayCopy 方法。

$array = array_slice($categories->getIterator()->getArrayCopy(), 2);

这应该(未经测试)返回一个包含预期元素切片的 PHP 数组。

希望对您有所帮助!

关于PHP - 相当于 array_slice() 的对象;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35943426/

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