CList
包 | system.collections |
---|---|
继承 | class CList » CComponent |
实现 | IteratorAggregate, Traversable, ArrayAccess, Countable |
子类 | CFilterChain, CTypedList |
可用自 | 1.0 |
源码 | framework/collections/CList.php |
You can access, append, insert, remove an item by using itemAt, add, insertAt, remove, and removeAt. To get the number of the items in the list, use getCount. CList can also be used like a regular array as follows,
$list[]=$item; // append at the end $list[$index]=$item; // $index must be between 0 and $list->Count unset($list[$index]); // remove the item at $index if(isset($list[$index])) // if the list has an item at $index foreach($list as $index=>$item) // traverse each item in the list $n=count($list); // returns the number of items in the list
To extend CList by doing additional operations with each addition or removal operation (e.g. performing type check), override insertAt(), and removeAt().
公共属性
属性 | 类型 | 描述 | 被定义在 |
---|---|---|---|
count | integer | Returns the number of items in the list. | CList |
iterator | Iterator | Returns an iterator for traversing the items in the list. | CList |
readOnly | boolean | whether this list is read-only or not. | CList |
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
__call() | Calls the named method which is not a class method. | CComponent |
__construct() | Constructor. | CList |
__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() | Appends an item at the end of the list. | CList |
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 list. | CList |
contains() | CList | |
copyFrom() | Copies iterable data into the list. | CList |
count() | Returns the number of items in the list. | CList |
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 list. | CList |
getEventHandlers() | Returns the list of attached event handlers for an event. | CComponent |
getIterator() | Returns an iterator for traversing the items in the list. | CList |
getReadOnly() | Returns whether this list is read-only or not. Defaults to false. | CList |
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 |
indexOf() | CList | |
insertAt() | Inserts an item at the specified position. | CList |
itemAt() | Returns the item at the specified offset. | CList |
mergeWith() | Merges iterable data into the map. | CList |
offsetExists() | Returns whether there is an item at the specified offset. | CList |
offsetGet() | Returns the item at the specified offset. | CList |
offsetSet() | Sets the item at the specified offset. | CList |
offsetUnset() | Unsets the item at the specified offset. | CList |
raiseEvent() | Raises an event. | CComponent |
remove() | Removes an item from the list. | CList |
removeAt() | Removes an item at the specified position. | CList |
toArray() | CList |
属性详情
Returns the number of items in the list.
Returns an iterator for traversing the items in the list. This method is required by the interface IteratorAggregate.
whether this list 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 integer add(mixed $item)
| ||
$item | mixed | new item |
{return} | integer | the zero-based index at which the item is added |
public function add($item)
{
$this->insertAt($this->_c,$item);
return $this->_c-1;
}
Appends an item at the end of the list.
public void clear()
|
public function clear()
{
for($i=$this->_c-1;$i>=0;--$i)
$this->removeAt($i);
}
Removes all items in the list.
public boolean contains(mixed $item)
| ||
$item | mixed | the item |
{return} | boolean | whether the list contains the item |
public function contains($item)
{
return $this->indexOf($item)>=0;
}
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->_c>0)
$this->clear();
if($data instanceof CList)
$data=$data->_d;
foreach($data as $item)
$this->add($item);
}
elseif($data!==null)
throw new CException(Yii::t('yii','List data must be an array or an object implementing Traversable.'));
}
Copies iterable data into the list. Note, existing data in the list will be cleared first.
public integer count()
| ||
{return} | integer | number of items in the list. |
Returns the number of items in the list. This method is required by Countable interface.
public integer getCount()
| ||
{return} | integer | the number of items in the list |
Returns the number of items in the list.
public Iterator getIterator()
| ||
{return} | Iterator | an iterator for traversing the items in the list. |
public function getIterator()
{
return new CListIterator($this->_d);
}
Returns an iterator for traversing the items in the list. This method is required by the interface IteratorAggregate.
public boolean getReadOnly()
| ||
{return} | boolean | whether this list is read-only or not. Defaults to false. |
public integer indexOf(mixed $item)
| ||
$item | mixed | the item |
{return} | integer | the index of the item in the list (0 based), -1 if not found. |
public function indexOf($item)
{
if(($index=array_search($item,$this->_d,true))!==false)
return $index;
else
return -1;
}
public void insertAt(integer $index, mixed $item)
| ||
$index | integer | the specified position. |
$item | mixed | new item |
public function insertAt($index,$item)
{
if(!$this->_r)
{
if($index===$this->_c)
$this->_d[$this->_c++]=$item;
elseif($index>=0 && $index<$this->_c)
{
array_splice($this->_d,$index,0,array($item));
$this->_c++;
}
else
throw new CException(Yii::t('yii','List index "{index}" is out of bound.',
array('{index}'=>$index)));
}
else
throw new CException(Yii::t('yii','The list is read only.'));
}
Inserts an item at the specified position. Original item at the position and the next items will be moved one step towards the end.
public mixed itemAt(integer $index)
| ||
$index | integer | the index of the item |
{return} | mixed | the item at the index |
public function itemAt($index)
{
if(isset($this->_d[$index]))
return $this->_d[$index];
elseif($index>=0 && $index<$this->_c) // in case the value is null
return $this->_d[$index];
else
throw new CException(Yii::t('yii','List index "{index}" is out of bound.',
array('{index}'=>$index)));
}
Returns the item at the specified offset. This method is exactly the same as offsetGet.
public void mergeWith(mixed $data)
| ||
$data | mixed | the data to be merged with, must be an array or object implementing Traversable |
public function mergeWith($data)
{
if(is_array($data) || ($data instanceof Traversable))
{
if($data instanceof CList)
$data=$data->_d;
foreach($data as $item)
$this->add($item);
}
elseif($data!==null)
throw new CException(Yii::t('yii','List data must be an array or an object implementing Traversable.'));
}
Merges iterable data into the map. New data will be appended to the end of the existing data.
public boolean offsetExists(integer $offset)
| ||
$offset | integer | the offset to check on |
{return} | boolean |
public function offsetExists($offset)
{
return ($offset>=0 && $offset<$this->_c);
}
Returns whether there is an item at the specified offset. This method is required by the interface ArrayAccess.
public mixed offsetGet(integer $offset)
| ||
$offset | integer | the offset to retrieve item. |
{return} | mixed | the item at the offset |
public function offsetGet($offset)
{
return $this->itemAt($offset);
}
Returns the item 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 item |
$item | mixed | the item value |
public function offsetSet($offset,$item)
{
if($offset===null || $offset===$this->_c)
$this->insertAt($this->_c,$item);
else
{
$this->removeAt($offset);
$this->insertAt($offset,$item);
}
}
Sets the item at the specified offset. This method is required by the interface ArrayAccess.
public void offsetUnset(integer $offset)
| ||
$offset | integer | the offset to unset item |
public function offsetUnset($offset)
{
$this->removeAt($offset);
}
Unsets the item at the specified offset. This method is required by the interface ArrayAccess.
public integer remove(mixed $item)
| ||
$item | mixed | the item to be removed. |
{return} | integer | the index at which the item is being removed |
public function remove($item)
{
if(($index=$this->indexOf($item))>=0)
{
$this->removeAt($index);
return $index;
}
else
return false;
}
Removes an item from the list. The list will first search for the item. The first item found will be removed from the list.
public mixed removeAt(integer $index)
| ||
$index | integer | the index of the item to be removed. |
{return} | mixed | the removed item. |
public function removeAt($index)
{
if(!$this->_r)
{
if($index>=0 && $index<$this->_c)
{
$this->_c--;
if($index===$this->_c)
return array_pop($this->_d);
else
{
$item=$this->_d[$index];
array_splice($this->_d,$index,1);
return $item;
}
}
else
throw new CException(Yii::t('yii','List index "{index}" is out of bound.',
array('{index}'=>$index)));
}
else
throw new CException(Yii::t('yii','The list is read only.'));
}
Removes an item at the specified position.
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 |