note 117102 added to class.multipleiterator
| From: | sven at rtbg dot de | Date: | Wed, 15 Apr 2015 13:34:09 +0000 |
| Subject: | note 117102 added to class.multipleiterator | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-202270@lists.php.net to get a copy of this message | ||
This iterator has a misleading name and description - it actually acts as a parallel iterator: You
attach one or more iterators with a key, integer or NULL, and when you iterate over the
MultipleIterator, as the result for current() you get ALL results from all attached iterators as an
array (under the key or integer you attached it with), and the same is true for the key() call.
valid() will be valid if any or all iterators are valid, depending on the setting of the $flags -
with ANY, you can iterate over a set of iterators with some of them ending before others, and get
NULL results from these iterators until the last iterator is at it's end. With ALL, iteration
stops when the first iterator stops delivering results.
next() and rewind() will be called on all attached iterators in every case.
<?php
$it1 = new ArrayIterator(array(1,2,3));
$it2 = new ArrayIterator(array(4,5,6));
$multipleIterator = new
MultipleIterator(MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_ASSOC);
$multipleIterator->attachIterator($it1, 1);
$multipleIterator->attachIterator($it2, 'second');
foreach ($multipleIterator as $key => $value) {
echo "Key\n"; var_dump($key);
echo "Value\n"; var_dump($value);
echo "---next---\n";
}
?>
Result with PHP 5.5.0 and up:
Key
array(2) {
[1]=>
int(0)
["second"]=>
int(0)
}
Value
array(2) {
[1]=>
int(1)
["second"]=>
int(4)
}
---next---
Key
array(2) {
[1]=>
int(1)
["second"]=>
int(1)
}
Value
array(2) {
[1]=>
int(2)
["second"]=>
int(5)
}
---next---
Key
array(2) {
[1]=>
int(2)
["second"]=>
int(2)
}
Value
array(2) {
[1]=>
int(3)
["second"]=>
int(6)
}
---next---
Note that PHP 5.4 and 5.3 do not support accessing the key() values in foreach loops because they
expect them to not be an array - doing so will cause "Warning: Illegal type returned from
MultipleIterator::key()" and the result of (int)0 as the key for all iterations.
Without the MultipleIterator::MIT_KEYS_ASSOC flag, the MultipleIterator will create numeric indices
based on the order of attachment.
----
Server IP: 72.52.91.14
Probable Submitter: 83.169.152.176
----
Manual Page -- http://php.net/manual/en/class.multipleiterator.php
Edit -- https://master.php.net/note/edit/117102
Del: integrated -- https://master.php.net/note/delete/117102/integrated
Del: useless -- https://master.php.net/note/delete/117102/useless
Del: bad code -- https://master.php.net/note/delete/117102/bad+code
Del: spam -- https://master.php.net/note/delete/117102/spam
Del: non-english -- https://master.php.net/note/delete/117102/non-english
Del: in docs -- https://master.php.net/note/delete/117102/in+docs
Del: other reasons-- https://master.php.net/note/delete/117102
Reject -- https://master.php.net/note/reject/117102
Search -- https://master.php.net/manage/user-notes.php