ArrayList в php

Существуют ли какие-либо структуры данных в php, кроме array. Возможно ли создать структуру данных, такую ​​как ArrayList? Если да, пожалуйста, предоставьте некоторые ссылки или какую-то реализацию.

Ответы

Ответ 1

Все, что вам нужно знать о массивах, можно найти в документации.

Все доступные функции для массивов перечислены в описании функций.

Некоторые примечания:

  • Массивы изначально были единственной файловой структурой в PHP. Вот почему они настолько гибкие. Они предназначались для использования как стек, очередь, массив, список, хеш-таблица и так далее. Позже PHP представил datastructures.
  • В отличие от Java, PHP не является чистым языком OO. Сам массив не имеет встроенных методов, которые вы можете применить. Это должно выполняться с помощью "обычных" функций.
  • Массивы не имеют фиксированного размера. Они расширяются и автоматически сокращаются.

В следующем примере я попытался перечислить альтернативы PHP для наиболее распространенных методов ArrayList:

  • add(element) в основном просто добавляется через $array[] = $element. Новое значение получает следующий бесплатный числовой индекс (это предпочтительный вариант). Вы также можете использовать array_push($array, $element).
  • addAll(ArrayList): array_merge($array1, $array2). Будьте осторожны при слиянии ассоциативных массивов. Значения для тех же клавиш будут перезаписаны.
  • clone(): Поскольку массивы не являются объектами, вы "клонируете" массив, просто назначив его другой переменной:

        $a = array(1,2,3);
        $b = $a;
    
  • contains(element): in_array($element, $array)

  • get(index): Как и на большинстве языков: $val = $array[index];
  • indexOf(element): array_keys($array, $element) со значением, которое вы ищете как второй параметр
  • isEmpty(): empty($array)
  • remove(index): Его unset($array[index])
  • remove(value) со значением: вы должны сначала получить ключи (см. indexOf), перебрать их и использовать unset.
  • size(): count($array)

Ответ 2

Если вы (или кто-либо еще читающий это) просто хотите (по какой-либо причине) Java, такой как ArrayList для PHP, вы можете использовать это.

Полный исходный код: http://www.phpclasses.org/browse/file/4191.html

    /**
     * ArrayList class
     * @version 0.2
     * @author Tim Anlauf <[email protected]>
     * @url http://www.phpclasses.org/browse/file/4191.html
     **/
    class ArrayList {
            function ArrayList($arr="") 
            function addToPos($index, $obj)         
            function add($obj) 
            function addAll($arr) 
            function clear() 
            function contains($obj) 
            function get($index) 
            function indexOf($obj) 
            function isEmpty() 
            function lastIndexOf($obj) 
            function remove($index) 
            function removeRange($fromIndex, $toIndex) 
            function size() 
            function sort() 
            function toArray() 
            function hasNext() 
            function reset() 
            function next() 
            function isInteger($toCheck) 
    }

Ответ 3

Я попытался реализовать, вот какой-то простой код:

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

}

Ответ 4

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

или

class DataStructure {
    var $val1;
    var $val2;
}
$item = new DataStructure();
$item -> val1 = 'value1';

Я понятия не имею, что такое "arrayList" (звучит Java), но если это список массивов, эквивалент PHP:

array(
    array(
        'item1',
        'item2'
    ),
    array(
        'item1',
        'item2'
    )
)

[править]

Если этот arrayList является просто массивом, вы можете использовать

array(
    'item1',
    'item2'
)

Ответ 5

расширяя класс ArrayObject, вы можете легко создать некоторый базовый класс (например, Vector, Collection of ArrayList).

Ответ 6

Ближайшим сходством PHP с классом ArrayList от Java является ArrayObject. Имена методов различны, но функциональность между ними довольно близка.

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