|
|
@@ -0,0 +1,67 @@
|
|
|
+<?php
|
|
|
+/**
|
|
|
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
|
|
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
|
|
+ *
|
|
|
+ * Licensed under The MIT License
|
|
|
+ * For full copyright and license information, please see the LICENSE.txt
|
|
|
+ * Redistributions of files must retain the above copyright notice.
|
|
|
+ *
|
|
|
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
|
|
+ * @link http://cakephp.org CakePHP(tm) Project
|
|
|
+ * @since 3.0.0
|
|
|
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
|
|
+ */
|
|
|
+namespace Cake\Collection\Iterator;
|
|
|
+
|
|
|
+use Cake\Collection\Collection;
|
|
|
+use IteratorIterator;
|
|
|
+use RecursiveIterator;
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ */
|
|
|
+class UnfoldIterator extends IteratorIterator implements RecursiveIterator {
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ *
|
|
|
+ * @var callable
|
|
|
+ */
|
|
|
+ protected $_unfolder;
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * @param array|\Traversable $items The list of values to iterate
|
|
|
+ * @param callable $unfolder
|
|
|
+ */
|
|
|
+ public function __construct($items, callable $unfolder) {
|
|
|
+ $this->_unfolder = $unfolder;
|
|
|
+ parent::__construct($items);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function hasChildren() {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getChildren() {
|
|
|
+ $current = $this->current();
|
|
|
+ $key = $this->key();
|
|
|
+ $unfolder = $this->_unfolder;
|
|
|
+
|
|
|
+ return new NoChildrenIterator($unfolder($current, $key, $this));
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+class NoChildrenIterator extends Collection implements RecursiveIterator {
|
|
|
+
|
|
|
+ public function hasChildren() {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getChildren() {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|