queue)); if ($this->count === 0) { $this->queue[$key] = ['key' => $key, 'job' => $job, 'priority' => $priority]; } else { $pos = 0; foreach ($this->queue as $ele) { if ($ele['priority'] < $priority) { break; } $pos++; } array_splice($original, $pos, 0, [$key => ['key' => $key, 'job' => $job, 'priority' => $priority]]); } return $key; } /** * Increase all queue priorities. * * @param float $increase Value to increase every element * * @return void * * @since 1.0.0 */ public function increaseAll(float $increase = 0.1) /* : void */ { foreach ($this->queue as $key => &$ele) { $ele['priority'] += $increase; } } /** * Pop element. * * @return mixed * * @since 1.0.0 */ public function pop() { return array_pop($this->queue); } /** * Delete element. * * @param int $id Element to delete * * @return void * * @since 1.0.0 */ public function delete(int $id = null) /* : void */ { if ($id === null) { $this->remove(); } else { unset($this->queue[$id]); } } /** * Delete last element. * * @since 1.0.0 */ public function remove() { return array_pop($this->queue); } /** * Set element priority. * * @param int $id Element ID * @param float $priority Element priority * * @return void * * @since 1.0.0 */ public function setPriority(int $id, float $priority) /* : void */ { $this->queue[$id]['priority'] = $priority; } /** * Set element priority. * * @param int $id Element ID * * @return float * * @since 1.0.0 */ public function getPriority(int $id) : float { return $this->queue[$id]['priority']; } /** * {@inheritdoc} */ public function count() : int { return $this->count; } /** * {@inheritdoc} */ public function serialize() : string { return json_encode($this->queue); } /** * Unserialize queue. * * @param string $data Data to unserialze * * @since 1.0.0 */ public function unserialize($data) { $this->queue = json_decode($data); $this->count = count($this->queue); } }