ArrayList в php

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

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

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

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

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

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

  • add(element) в основном просто 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 ), indexOf их и использовать unset .
  • size() : count($array)

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

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

  /** * ArrayList class * @version 0.2 * @author Tim Anlauf <schranzistorradio@gmx.de> * @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) } 

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

 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]; } } } с 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]; } } } 
 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' ) 

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

Ближайшим сходством 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 ) }