php中的ArrayList

php中的ArrayList,php,data-structures,arraylist,Php,Data Structures,Arraylist,在php中除了array之外还有其他数据结构吗。是否可以创建数据结构,例如ArrayList?如果是,请提供一些参考资料或某种实现方式 array( 'key' => 'value', 'key2' => 'value2' ) 或 我不知道这个“arrayList”是什么(听起来像Java),但如果它是一个数组列表,那么PHP等价物应该是: array( array( 'item1', 'item2' ), a

php
中除了
array
之外还有其他数据结构吗。是否可以创建数据结构,例如
ArrayList
?如果是,请提供一些参考资料或某种实现方式

array(
    'key' => 'value',
    'key2' => 'value2'
)

我不知道这个“arrayList”是什么(听起来像Java),但如果它是一个数组列表,那么PHP等价物应该是:

array(
    array(
        'item1',
        'item2'
    ),
    array(
        'item1',
        'item2'
    )
)
[编辑]

如果这个
arrayList
只是一个数组,那么您可以使用

array(
    'item1',
    'item2'
)

通过扩展ArrayObject类,您可以非常轻松地创建一些基本类(如Vector、ArrayList集合)。

有关数组的所有信息都可以在中找到

中列出了阵列的所有可用函数

一些注意事项:

  • 数组最初是PHP中唯一的数据结构。这就是他们如此灵活的原因。它们被用作堆栈、队列、数组、列表、哈希表等。后来PHP引入了
  • 与Java不同,PHP不是一种纯粹的OO语言。数组本身没有可以应用的内置方法。这必须通过“正常”功能完成
  • 数组没有固定的大小。它们会自动膨胀和收缩
在以下内容中,我尝试列出最常见的PHP替代方案:

  • add(element)
    基本上只是通过
    $array[]=$element
    进行追加。新值获取下一个自由数字索引(这是首选方法)。您也可以使用
  • addAll(ArrayList)
    :在某种程度上。合并关联数组时要小心。相同键的值将被覆盖
  • clone()
    :由于数组不是对象,您可以通过将数组分配给另一个变量来“克隆”数组:

        $a = array(1,2,3);
        $b = $a;
    
  • 包含(元素)

  • get(index)
    :与大多数语言类似:
    $val=$array[index]
  • indexOf(element)
    :使用搜索的值作为第二个参数
  • isEmpty()
  • remove(index)
    :其
    unset($array[index])
  • remove(value)
    with value:您必须首先获取键(请参见
    indexOf
    ),迭代它们的键并使用
    unset
  • size()
如果您(或其他阅读本文的人)只是想要(出于任何原因)一个类似Java的PHP ArrayList,您可以使用它

完整资料来源:

/**
*阵列列表类
*@version 0.2
*@作者蒂姆·安洛夫
*@urlhttp://www.phpclasses.org/browse/file/4191.html
**/
类数组列表{
函数ArrayList($arr=”“)
函数addToPos($index,$obj)
功能添加($obj)
函数addAll($arr)
函数clear()
函数包含($obj)
函数get($index)
函数索引($obj)
函数isEmpty()
函数lastIndexOf($obj)
函数删除($index)
函数删除范围($fromIndex,$toIndex)
函数大小()
函数排序()
函数toArray()
函数hasNext()
函数重置()
函数next()
函数isInteger($toCheck)
}

我试图实现,下面是一些简单的代码:

class ArrayList {

private $list = array();


public function Add($obj)
{
    array_push($this->list, $obj);
}

public function Remove($key)
{
    if(array_key_exists($key, $this->list))
    {
        unset($this->list[$key]);
    }
}

public function Size()
{
    return count($this->list);
}

public function IsEmpty()
{
    return empty($this->list);
}

public function GetObj($key)
{
    if(array_key_exists($key, $this->list))
    {
        return $this->list[$key];
    }
    else
    {
        return NULL;
    }
}

public function GetKey($obj)
{
    $arrKeys = array_keys($this->list, $obj);

    if(empty($arrKeys))    
    {
        return -1;
    }
    else
    {
        return $arrKeys[0];
    }
}

}

与Java中的类最相似的PHP是类。方法名称不同,但两者之间的功能相当接近

 ArrayObject implements IteratorAggregate , ArrayAccess , Serializable , Countable {
    /* Constants */
    const integer STD_PROP_LIST = 1 ;
    const integer ARRAY_AS_PROPS = 2 ;
    /* Methods */
    public __construct ([ mixed $input = [] [, int $flags = 0 [, string $iterator_class = "ArrayIterator" ]]] )
    public void append ( mixed $value )
    public void asort ( void )
    public int count ( void )
    public array exchangeArray ( mixed $input )
    public array getArrayCopy ( void )
    public int getFlags ( void )
    public ArrayIterator getIterator ( void )
    public string getIteratorClass ( void )
    public void ksort ( void )
    public void natcasesort ( void )
    public void natsort ( void )
    public bool offsetExists ( mixed $index )
    public mixed offsetGet ( mixed $index )
    public void offsetSet ( mixed $index , mixed $newval )
    public void offsetUnset ( mixed $index )
    public string serialize ( void )
    public void setFlags ( int $flags )
    public void setIteratorClass ( string $iterator_class )
    public void uasort ( callable $cmp_function )
    public void uksort ( callable $cmp_function )
    public void unserialize ( string $serialized )
}

首先,您需要了解数组和
ArrayList
之间的区别。我认为您需要更多地阅读PHP数组。Java中的
ArrayList
提供的额外功能大多内置于PHP数组中,或通过全局函数(例如,
sort
)提供。例如,请参见。该链接是Google搜索php数组列表的第二个热门链接。你可以很容易地自己找到它。(参考)有点晚了,但看看这里:数组列表实际上是一个数组,但具有增强的功能。例如,存在预定义的索引方法,即使超过数组大小,也可以帮助在数组中添加新元素。例如,如果大小为5的数组a要添加元素号6,则不必关心重写大小为5+1的新数组中的所有元素以添加最后一个元素的过程。还有排序..etcumm,唯一的数据结构?你的观点如何。我更多的是考虑内置的数据结构。。。但是说实话,我不知道你联系到的那些人有多受欢迎。我从来没有用过它们,它们没有任何意义。嘿@Cooper,把这个答案标记为正确!这解释了PHP中关于数组的所有知识。这对我也有帮助。
class ArrayList {

private $list = array();


public function Add($obj)
{
    array_push($this->list, $obj);
}

public function Remove($key)
{
    if(array_key_exists($key, $this->list))
    {
        unset($this->list[$key]);
    }
}

public function Size()
{
    return count($this->list);
}

public function IsEmpty()
{
    return empty($this->list);
}

public function GetObj($key)
{
    if(array_key_exists($key, $this->list))
    {
        return $this->list[$key];
    }
    else
    {
        return NULL;
    }
}

public function GetKey($obj)
{
    $arrKeys = array_keys($this->list, $obj);

    if(empty($arrKeys))    
    {
        return -1;
    }
    else
    {
        return $arrKeys[0];
    }
}

}
 ArrayObject implements IteratorAggregate , ArrayAccess , Serializable , Countable {
    /* Constants */
    const integer STD_PROP_LIST = 1 ;
    const integer ARRAY_AS_PROPS = 2 ;
    /* Methods */
    public __construct ([ mixed $input = [] [, int $flags = 0 [, string $iterator_class = "ArrayIterator" ]]] )
    public void append ( mixed $value )
    public void asort ( void )
    public int count ( void )
    public array exchangeArray ( mixed $input )
    public array getArrayCopy ( void )
    public int getFlags ( void )
    public ArrayIterator getIterator ( void )
    public string getIteratorClass ( void )
    public void ksort ( void )
    public void natcasesort ( void )
    public void natsort ( void )
    public bool offsetExists ( mixed $index )
    public mixed offsetGet ( mixed $index )
    public void offsetSet ( mixed $index , mixed $newval )
    public void offsetUnset ( mixed $index )
    public string serialize ( void )
    public void setFlags ( int $flags )
    public void setIteratorClass ( string $iterator_class )
    public void uasort ( callable $cmp_function )
    public void uksort ( callable $cmp_function )
    public void unserialize ( string $serialized )
}