Package | system.collections |
---|---|
Inheritance | class CMap » CComponent |
Implements | IteratorAggregate, Traversable, ArrayAccess, Countable |
Subclasses | CAttributeCollection, CConfiguration, CCookieCollection, CFormElementCollection, CTypedMap |
Since | 1.0 |
Source Code | framework/collections/CMap.php |
$map[$key]=$value; // add a key-value pair unset($map[$key]); // remove the value with the specified key if(isset($map[$key])) // if the map contains the key foreach($map as $key=>$value) // traverse the items in the map $n=count($map); // returns the number of items in the map
Property | Type | Description | Defined By |
---|---|---|---|
count | integer | Returns the number of items in the map. | CMap |
iterator | CMapIterator | Returns an iterator for traversing the items in the list. | CMap |
keys | array | the key list | CMap |
readOnly | boolean | whether this map is read-only or not. | CMap |
Method | Description | Defined By |
---|---|---|
__call() | Calls the named method which is not a class method. | CComponent |
__construct() | Constructor. | CMap |
__get() | Returns a property value, an event handler list or a behavior based on its name. | CComponent |
__isset() | Checks if a property value is null. | CComponent |
__set() | Sets value of a component property. | CComponent |
__unset() | Sets a component property to be null. | CComponent |
add() | Adds an item into the map. | CMap |
asa() | Returns the named behavior object. | CComponent |
attachBehavior() | Attaches a behavior to this component. | CComponent |
attachBehaviors() | Attaches a list of behaviors to the component. | CComponent |
attachEventHandler() | Attaches an event handler to an event. | CComponent |
canGetProperty() | Determines whether a property can be read. | CComponent |
canSetProperty() | Determines whether a property can be set. | CComponent |
clear() | Removes all items in the map. | CMap |
contains() | CMap | |
copyFrom() | Copies iterable data into the map. | CMap |
count() | Returns the number of items in the map. | CMap |
detachBehavior() | Detaches a behavior from the component. | CComponent |
detachBehaviors() | Detaches all behaviors from the component. | CComponent |
detachEventHandler() | Detaches an existing event handler. | CComponent |
disableBehavior() | Disables an attached behavior. | CComponent |
disableBehaviors() | Disables all behaviors attached to this component. | CComponent |
enableBehavior() | Enables an attached behavior. | CComponent |
enableBehaviors() | Enables all behaviors attached to this component. | CComponent |
evaluateExpression() | Evaluates a PHP expression or callback under the context of this component. | CComponent |
getCount() | Returns the number of items in the map. | CMap |
getEventHandlers() | Returns the list of attached event handlers for an event. | CComponent |
getIterator() | Returns an iterator for traversing the items in the list. | CMap |
getKeys() | Returns the key list | CMap |
getReadOnly() | Returns whether this map is read-only or not. Defaults to false. | CMap |
hasEvent() | Determines whether an event is defined. | CComponent |
hasEventHandler() | Checks whether the named event has attached handlers. | CComponent |
hasProperty() | Determines whether a property is defined. | CComponent |
itemAt() | Returns the item with the specified key. | CMap |
mergeArray() | Merges two or more arrays into one recursively. | CMap |
mergeWith() | Merges iterable data into the map. | CMap |
offsetExists() | Returns whether there is an element at the specified offset. | CMap |
offsetGet() | Returns the element at the specified offset. | CMap |
offsetSet() | Sets the element at the specified offset. | CMap |
offsetUnset() | Unsets the element at the specified offset. | CMap |
raiseEvent() | Raises an event. | CComponent |
remove() | Removes an item from the map by its key. | CMap |
toArray() | CMap |
Method | Description | Defined By |
---|---|---|
setReadOnly() | Sets whether this list is read-only or not | CMap |
Returns the number of items in the map.
Returns an iterator for traversing the items in the list. This method is required by the interface IteratorAggregate.
the key list
whether this map is read-only or not. Defaults to false.
public void __construct(array $data=NULL, boolean $readOnly=false)
| ||
$data | array | the initial data. Default is null, meaning no initialization. |
$readOnly | boolean | whether the list is read-only |
public function __construct($data=null,$readOnly=false)
{
if($data!==null)
$this->copyFrom($data);
$this->setReadOnly($readOnly);
}
Constructor. Initializes the list with an array or an iterable object.
public void add(mixed $key, mixed $value)
| ||
$key | mixed | key |
$value | mixed | value |
public function add($key,$value)
{
if(!$this->_r)
{
if($key===null)
$this->_d[]=$value;
else
$this->_d[$key]=$value;
}
else
throw new CException(Yii::t('yii','The map is read only.'));
}
Adds an item into the map. Note, if the specified key already exists, the old value will be overwritten.
public void clear()
|
public function clear()
{
foreach(array_keys($this->_d) as $key)
$this->remove($key);
}
Removes all items in the map.
public boolean contains(mixed $key)
| ||
$key | mixed | the key |
{return} | boolean | whether the map contains an item with the specified key |
public function contains($key)
{
return isset($this->_d[$key]) || array_key_exists($key,$this->_d);
}
public void copyFrom(mixed $data)
| ||
$data | mixed | the data to be copied from, must be an array or object implementing Traversable |
public function copyFrom($data)
{
if(is_array($data) || $data instanceof Traversable)
{
if($this->getCount()>0)
$this->clear();
if($data instanceof CMap)
$data=$data->_d;
foreach($data as $key=>$value)
$this->add($key,$value);
}
elseif($data!==null)
throw new CException(Yii::t('yii','Map data must be an array or an object implementing Traversable.'));
}
Copies iterable data into the map. Note, existing data in the map will be cleared first.
public integer count()
| ||
{return} | integer | number of items in the map. |
public function count()
{
return $this->getCount();
}
Returns the number of items in the map. This method is required by Countable interface.
public integer getCount()
| ||
{return} | integer | the number of items in the map |
public function getCount()
{
return count($this->_d);
}
Returns the number of items in the map.
public CMapIterator getIterator()
| ||
{return} | CMapIterator | an iterator for traversing the items in the list. |
public function getIterator()
{
return new CMapIterator($this->_d);
}
Returns an iterator for traversing the items in the list. This method is required by the interface IteratorAggregate.
public array getKeys()
| ||
{return} | array | the key list |
public function getKeys()
{
return array_keys($this->_d);
}
public boolean getReadOnly()
| ||
{return} | boolean | whether this map is read-only or not. Defaults to false. |
public function getReadOnly()
{
return $this->_r;
}
public mixed itemAt(mixed $key)
| ||
$key | mixed | the key |
{return} | mixed | the element at the offset, null if no element is found at the offset |
public function itemAt($key)
{
if(isset($this->_d[$key]))
return $this->_d[$key];
else
return null;
}
Returns the item with the specified key. This method is exactly the same as offsetGet.
public static array mergeArray(array $a, array $b)
| ||
$a | array | array to be merged to |
$b | array | array to be merged from. You can specify additional arrays via third argument, fourth argument etc. |
{return} | array | the merged array (the original arrays are not changed.) |
public static function mergeArray($a,$b)
{
$args=func_get_args();
$res=array_shift($args);
while(!empty($args))
{
$next=array_shift($args);
foreach($next as $k => $v)
{
if(is_integer($k))
isset($res[$k]) ? $res[]=$v : $res[$k]=$v;
elseif(is_array($v) && isset($res[$k]) && is_array($res[$k]))
$res[$k]=self::mergeArray($res[$k],$v);
else
$res[$k]=$v;
}
}
return $res;
}
Merges two or more arrays into one recursively. If each array has an element with the same string key value, the latter will overwrite the former (different from array_merge_recursive). Recursive merging will be conducted if both arrays have an element of array type and are having the same key. For integer-keyed elements, the elements from the latter array will be appended to the former array.
public void mergeWith(mixed $data, boolean $recursive=true)
| ||
$data | mixed | the data to be merged with, must be an array or object implementing Traversable |
$recursive | boolean | whether the merging should be recursive. |
public function mergeWith($data,$recursive=true)
{
if(is_array($data) || $data instanceof Traversable)
{
if($data instanceof CMap)
$data=$data->_d;
if($recursive)
{
if($data instanceof Traversable)
{
$d=array();
foreach($data as $key=>$value)
$d[$key]=$value;
$this->_d=self::mergeArray($this->_d,$d);
}
else
$this->_d=self::mergeArray($this->_d,$data);
}
else
{
foreach($data as $key=>$value)
$this->add($key,$value);
}
}
elseif($data!==null)
throw new CException(Yii::t('yii','Map data must be an array or an object implementing Traversable.'));
}
Merges iterable data into the map.
Existing elements in the map will be overwritten if their keys are the same as those in the source.
If the merge is recursive, the following algorithm is performed:
public boolean offsetExists(mixed $offset)
| ||
$offset | mixed | the offset to check on |
{return} | boolean |
public function offsetExists($offset)
{
return $this->contains($offset);
}
Returns whether there is an element at the specified offset. This method is required by the interface ArrayAccess.
public mixed offsetGet(integer $offset)
| ||
$offset | integer | the offset to retrieve element. |
{return} | mixed | the element at the offset, null if no element is found at the offset |
public function offsetGet($offset)
{
return $this->itemAt($offset);
}
Returns the element at the specified offset. This method is required by the interface ArrayAccess.
public void offsetSet(integer $offset, mixed $item)
| ||
$offset | integer | the offset to set element |
$item | mixed | the element value |
public function offsetSet($offset,$item)
{
$this->add($offset,$item);
}
Sets the element at the specified offset. This method is required by the interface ArrayAccess.
public void offsetUnset(mixed $offset)
| ||
$offset | mixed | the offset to unset element |
public function offsetUnset($offset)
{
$this->remove($offset);
}
Unsets the element at the specified offset. This method is required by the interface ArrayAccess.
public mixed remove(mixed $key)
| ||
$key | mixed | the key of the item to be removed |
{return} | mixed | the removed value, null if no such key exists. |
public function remove($key)
{
if(!$this->_r)
{
if(isset($this->_d[$key]))
{
$value=$this->_d[$key];
unset($this->_d[$key]);
return $value;
}
else
{
// it is possible the value is null, which is not detected by isset
unset($this->_d[$key]);
return null;
}
}
else
throw new CException(Yii::t('yii','The map is read only.'));
}
Removes an item from the map by its key.
protected void setReadOnly(boolean $value)
| ||
$value | boolean | whether this list is read-only or not |
protected function setReadOnly($value)
{
$this->_r=$value;
}
public array toArray()
| ||
{return} | array | the list of items in array |
public function toArray()
{
return $this->_d;
}
difference between CMap::mergeArray and php array_merge_recursive
<?php $a = array('ja' => 'ku!'); $b = array('ja' => 'jo'); var_dump(array_merge_recursive($a, $B)); var_dump(CMap::mergeArray($a, $B)); Results: array(1) { ["ja"]=> array(2) { [0]=> string(3) "ku!" [1]=> string(2) "jo" } } array(1) { ["ja"]=> string(2) "jo" }
Signup or Login in order to comment.