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

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

Note, existing data in the map will be cleared first.
public copyFrom ( $data )
    public function copyFrom($data)
    {
        if ($data instanceof TPriorityMap) {
            if ($this->getCount() > 0) {
                $this->clear();
            }
            foreach ($data->getPriorities() as $priority) {
                foreach ($data->itemsAtPriority($priority) as $key => $value) {
                    $this->add($key, $value, $priority);
                }
            }
        } else {
            if (is_array($data) || $data instanceof \Traversable) {
                if ($this->getCount() > 0) {
                    $this->clear();
                }
                foreach ($data as $key => $value) {
                    $this->add($key, $value);
                }
            } else {
                if ($data !== null) {
                    throw new TInvalidDataTypeException('map_data_not_iterable');
                }
            }
        }
    }

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));
 }