标签: arrayiterator

PHP中ArrayIterator,ArrayObject和Array之间的区别

有人可以解释清楚的根本差异ArrayIterator,ArrayObject以及在阵列中的PHP的功能和操作方面?谢谢!

php arrays arrayiterator arrayobject

27
推荐指数
3
解决办法
2万
查看次数

使用RecursiveArrayIterator时如何更改数组键和值?

我怀疑我在这里做了些蠢事,但我对SPL的一个简单问题感到困惑:

如何使用RecursiveArrayIterator/RecursiveIteratorIterator修改数组的内容(本例中的值)?

使用以下测试代码,我可以使用getInnerIterator()offsetSet()更改循环内的值,并在循环中转储已修改的数组.

但是当我离开循环并从迭代器转储数组时,它又回到了原始值.发生了什么?

$aNestedArray = array();
$aNestedArray[101] = range(100, 1000, 100);
$aNestedArray[201] = range(300, 25, -25);
$aNestedArray[301] = range(500, 0, -50);

$cArray = new ArrayObject($aNestedArray);
$cRecursiveIter = new RecursiveIteratorIterator(new RecursiveArrayIterator($cArray), RecursiveIteratorIterator::LEAVES_ONLY);

// Zero any array elements under 200  
while ($cRecursiveIter->valid())
{
    if ($cRecursiveIter->current() < 200)
    {
        $cInnerIter = $cRecursiveIter->getInnerIterator();
        // $cInnerIter is a RecursiveArrayIterator
        $cInnerIter->offsetSet($cInnerIter->key(), 0);
    }

    // This returns the modified array as expected, with elements progressively being zeroed
    print_r($cRecursiveIter->getArrayCopy()); …
Run Code Online (Sandbox Code Playgroud)

php spl iterator arrayiterator

16
推荐指数
3
解决办法
4801
查看次数

如何检查数组是否包含php中的特定键

我知道如何检查数组中的值,但如何在Array Iterator中检查值?

$array = new ArrayIterator(array(
'1QmRjtsw2UQ' => array('pubdate' => '26 Jun 15', 'alt' => '8 Year Old Beautifully Covers Thinking Out Loud', 'anchor text' => '8-yo \'Thinking Out Loud\''),
'eKqLaYrcf3A' => array('pubdate' => '25 Jun 15', 'alt' => 'Plane Lands On Truck', 'anchor text' => 'Plane Lands On Truck'),
));
Run Code Online (Sandbox Code Playgroud)

我正在尝试检查诸如此类的值1QmRjtsw2UQ.

这不起作用:

if(in_array('1QmRjtsw2UQ', $array));
Run Code Online (Sandbox Code Playgroud)

php arrays arrayiterator multidimensional-array

8
推荐指数
2
解决办法
494
查看次数

PHP ArrayObject/ArrayIterator:概念与示例

我试图理解PHP中对象数组的概念.到目前为止,我只是使用常规数组循环遍历记录列表并在表格中显示它们.

我知道我可以使用Object做到这一点,但我不太清楚如何做到这一点.

我理解单个Object实例的概念,其中所有属性都表示从数据库填充的字段及其关联值,可以调用如下:

$objUser->first_name;
Run Code Online (Sandbox Code Playgroud)

现在我想了解的,根本找不到一个简单的答案是如何处理让我们说的用户列表,我想在一个页面上显示.我已经看到有ArrayObject,ArrayIterator等,但是根本无法理解它们是如何工作的,所以如果有人可以尝试用一些如何完成上述内容的例子来解释它,我将非常感激.

我正在寻找的是一个包含元素列表的对象,我可以像这样循环(如果可能的话):

foreach($objUsers as $objUser) {
    echo $objUser->first_name;
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

php foreach arrayiterator arrayobject

7
推荐指数
1
解决办法
7134
查看次数

如何使用ArrayIterator或ArrayObject使用implode?

我在使用ArrayIterator时遇到了一些问题(实际上,与ArrayObject相同的问题).

对于99%的所有内容,我的扩展ArrayIterator表现得像一个阵列,并且运行良好.

不幸的是,implode()不喜欢被赋予ArrayIterator(或ArrayObject).

我无法在文档中找到任何建议通过扩展ArrayIterator实现任何其他类的文档,也没有任何其他方法可以覆盖.

任何人都可以建议如何使这个工作?(注意:每次使用implode时都要转换为数组不是解决方案,因为我希望这个类似数组的对象能够完全作为一个数组工作,并且不需要使用它来代码知道/关心/强制转换)

php implode arrayiterator

6
推荐指数
1
解决办法
1719
查看次数

PHP ArrayIterator 和 current()

我有这段PHP代码:

echo 'PHP ' . phpversion()."\n";

$arr = array();
for ($i=0; $i<10; $i++)
{
    $arr[] = new stdClass();
}

$it = new ArrayIterator($arr);

$i = 1;
foreach ($it as $obj)
{
    $obj->test = $i;
    $i++;
}

var_dump(current($it));

die();
Run Code Online (Sandbox Code Playgroud)

PHP 5.3 的输出如下:

PHP 5.3.8
object(stdClass)#805 (1) {
  ["test"]=>
  int(1)
}
Run Code Online (Sandbox Code Playgroud)

PHP 7.4.8 上的输出如下:

PHP 7.4.8
file.php:33:boolean false
Run Code Online (Sandbox Code Playgroud)

为什么这不再起作用了?

php arrayiterator

5
推荐指数
0
解决办法
148
查看次数

为什么迭代使用无限循环结束的ArrayIterator?

我的代码中的数组非常大,所以我将它粘贴在pastebin中.http://pastebin.com/6tviT2Xj

我不明白为什么我会得到无限循环

这个脚本的逻辑是:

$it = new ArrayIterator($options);
while($it->valid()) {
    print $it->key();
    print $it->current();
}
Run Code Online (Sandbox Code Playgroud)

php infinite-loop arrayiterator

3
推荐指数
1
解决办法
617
查看次数

如何在PHP中克隆ArrayIterator?

我试图克隆一个\ ArrayIterator对象,但似乎克隆的对象仍然引用原始对象.

$list = new \ArrayIterator;
$list->append('a');
$list->append('b');

$list2 = clone $list;
$list2->append('c');
$list2->append('d');

// below result prints '4', i am expecting result '2'
echo $list->count();
Run Code Online (Sandbox Code Playgroud)

有人解释过这种行为吗?先感谢您.

php clone arrayiterator

3
推荐指数
1
解决办法
515
查看次数

“使用不可重入迭代器方法:Array.iterator()”错误消息是什么意思?

这是我的第一个项目libGDX,我正在尝试循环一个com.badlogic.gdx.utils.Array

//properties
...
private Array<Item> items;
...
//constructor
...
    items = new Array<Item>();
...
//render method
...
    for (Item item : items) {
        item.update(deltaTime);
    }
...
Run Code Online (Sandbox Code Playgroud)

Android Studioitems在悬停时突出显示消息:

使用不可重入迭代器方法:Array.iterator()

每次调用该方法时,LibGDX 集合上的迭代器方法都会返回相同的迭代器实例。对于嵌套或多线程迭代,使用适当的构造函数创建一个新的迭代器

我不确定如何解决这个问题,或者这是否只是一种通知类型的错误,从长远来看它是否会影响任何事情。

任何想法这是什么以及如何解决它?

java android reentrancy arrayiterator libgdx

3
推荐指数
1
解决办法
787
查看次数

迭代器比数组[i]快吗?

可能重复:
为什么使用迭代器而不是数组索引?

因为在我的生活中,我无法弄清楚它们是多么多余.

vector<string>::iterator iter1
vector<string>::const_iterator iter2
Run Code Online (Sandbox Code Playgroud)

也许他们更快?

c++ arrays iterator arrayiterator

1
推荐指数
2
解决办法
2771
查看次数