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