From d6a00a6b5dbaf4e389e6e9fefe9b8f11c05888eb Mon Sep 17 00:00:00 2001 From: Evan Coury Date: Sun, 29 Jul 2012 18:50:34 -0700 Subject: [PATCH] Simplify SplPriorityQueue::serialize() $queue = new \Zend\Stdlib\SplPriorityQueue; for ($i=0; $i<100; $i++) { $queue->insert('hello'.$i, $i); } // Before $time = microtime(true); for ($i=0; $i<1000; $i++) { $serialized = $queue->serialize(); } echo (microtime(true) - $time); // 0.75588607788086 // After $time = microtime(true); for ($i=0; $i<1000; $i++) { $serialized = $queue->serialize(); } echo (microtime(true) - $time); // 0.28470015525818 --- src/SplPriorityQueue.php | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/SplPriorityQueue.php b/src/SplPriorityQueue.php index 0b035db65..690b6f6c4 100644 --- a/src/SplPriorityQueue.php +++ b/src/SplPriorityQueue.php @@ -63,6 +63,7 @@ public function toArray() return $array; } + /** * Serialize * @@ -70,17 +71,12 @@ public function toArray() */ public function serialize() { - $data = array(); - $this->setExtractFlags(self::EXTR_BOTH); - while ($this->valid()) { - $data[] = $this->current(); - $this->next(); - } - $this->setExtractFlags(self::EXTR_DATA); + $clone = clone $this; + $clone->setExtractFlags(self::EXTR_BOTH); - // Iterating through a priority queue removes items - foreach ($data as $item) { - $this->insert($item['data'], $item['priority']); + $data = array(); + foreach ($clone as $item) { + $data[] = $item; } return serialize($data);