CList
CList implements an integer-indexed collection class.
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().
Public Properties
Property |
Type |
Description |
Defined By |
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 |
Protected Methods
Method |
Description |
Defined By |
setReadOnly() | Sets whether this list is read-only or not | CList |
Property Details
public integer getCount()
Returns the number of items in the list.
public Iterator getIterator()
Returns an iterator for traversing the items in the list. This method is required by the interface IteratorAggregate.
public boolean getReadOnly()
protected void setReadOnly(boolean $value)
whether this list is read-only or not. Defaults to false.
Method Details
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 |
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 |
Appends an item at the end of the list.
Removes all items in the list.
public boolean contains(mixed $item) |
$item | mixed | the item |
{return} | boolean | whether the list contains the item |
public void copyFrom(mixed $data) |
$data | mixed | the data to be copied from, must be an array or object implementing Traversable |
Source Code: framework/collections/CList.php#261 (
show)
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. |
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 void insertAt(integer $index, mixed $item) |
$index | integer | the specified position. |
$item | mixed | new item |
Source Code: framework/collections/CList.php#149 (
show)
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 |
Source Code: framework/collections/CList.php#119 (
show)
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 |
Source Code: framework/collections/CList.php#282 (
show)
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 | |
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 |
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 |
Source Code: framework/collections/CList.php#324 (
show)
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 |
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 |
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. |
Source Code: framework/collections/CList.php#193 (
show)
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 |
public array toArray() |
{return} | array | the list of items in array |