Prado\Collections\TPriorityMap::add PHP Метод

add() публичный Метод

Note, if the specified key already exists, the old value will be overwritten. No duplicate keys are allowed regardless of priority.
public add ( $key, $value, $priority = null ) : numeric
Результат numeric priority at which the pair was added
    public function add($key, $value, $priority = null)
    {
        if ($priority === null) {
            $priority = $this->getDefaultPriority();
        }
        $priority = (string) round(TPropertyValue::ensureFloat($priority), $this->_p);
        if (!$this->_r) {
            foreach ($this->_d as $innerpriority => $items) {
                if (array_key_exists($key, $items)) {
                    unset($this->_d[$innerpriority][$key]);
                    $this->_c--;
                    if (count($this->_d[$innerpriority]) === 0) {
                        unset($this->_d[$innerpriority]);
                    }
                }
            }
            if (!isset($this->_d[$priority])) {
                $this->_d[$priority] = array($key => $value);
                $this->_o = false;
            } else {
                $this->_d[$priority][$key] = $value;
            }
            $this->_c++;
            $this->_fd = null;
        } else {
            throw new TInvalidOperationException('map_readonly', get_class($this));
        }
        return $priority;
    }

Usage Example

Пример #1
0
 public function testCopyAndMergeWithPriorities()
 {
     $this->setUpPriorities();
     $map1 = new TPriorityMap();
     $map1->add('key1', $this->item1);
     $map1->add('keyc', 'valuec');
     $map1->copyFrom($this->map);
     $this->assertEquals(5, $map1->getCount());
     $array = $map1->toArray();
     $ordered_keys = array_keys($array);
     $this->assertEquals('key3', $ordered_keys[0]);
     $this->assertEquals('key5', $ordered_keys[1]);
     $this->assertEquals('key1', $ordered_keys[2]);
     $this->assertEquals('key2', $ordered_keys[3]);
     $this->assertEquals('key4', $ordered_keys[4]);
     $ordered_values = array_values($array);
     $this->assertEquals($this->item3, $ordered_values[0]);
     $this->assertEquals($this->item5, $ordered_values[1]);
     $this->assertEquals($this->item1, $ordered_values[2]);
     $this->assertEquals($this->item2, $ordered_values[3]);
     $this->assertEquals($this->item4, $ordered_values[4]);
     $map2 = new TPriorityMap();
     $map2->add('startkey', 'startvalue', -1000);
     $map2->add('key5', 'value5', 40);
     $map2->add('endkey', 'endvalue', 1000);
     $map2->mergeWith($this->map);
     $this->assertEquals(7, $map2->getCount());
     $array = $map2->toArray();
     $ordered_keys = array_keys($array);
     $this->assertEquals('startkey', $ordered_keys[0]);
     $this->assertEquals('key3', $ordered_keys[1]);
     $this->assertEquals('key5', $ordered_keys[2]);
     $this->assertEquals('key1', $ordered_keys[3]);
     $this->assertEquals('key2', $ordered_keys[4]);
     $this->assertEquals('key4', $ordered_keys[5]);
     $this->assertEquals('endkey', $ordered_keys[6]);
     $ordered_values = array_values($array);
     $this->assertEquals('startvalue', $ordered_values[0]);
     $this->assertEquals($this->item3, $ordered_values[1]);
     $this->assertEquals($this->item5, $ordered_values[2]);
     $this->assertEquals($this->item1, $ordered_values[3]);
     $this->assertEquals($this->item2, $ordered_values[4]);
     $this->assertEquals($this->item4, $ordered_values[5]);
     $this->assertEquals('endvalue', $ordered_values[6]);
     $this->assertEquals(1, $map2->priorityAt('key5'));
     $this->assertEquals(1, $map2->priorityOf($this->item5));
 }