web-dev-qa-db-fra.com

ArrayList en php

Existe-t-il des structures de données dans php autres que array. Est-il possible de créer une structure de données telle que ArrayList? Si tel est le cas, veuillez fournir des références ou une sorte de mise en œuvre.

16
Cooper

Tout ce que vous devez savoir sur les tableaux se trouve dans documentation .

Toutes les fonctions disponibles pour les tableaux sont répertoriées dans la référence des fonctions .

Quelques notes:

  • Les tableaux étaient à l'origine la seule structure de données en PHP. C'est pourquoi ils sont si flexibles. Ils étaient censés être utilisés en tant que pile, file d'attente, tableau, liste, table de hachage, etc. Plus tard, PHP a introduit le spl Datastructures .
  • Contrairement à Java, PHP n'est pas un langage pur OO. Un tableau lui-même n'a pas de méthodes intégrées que vous pouvez appliquer. Cela doit être fait via des fonctions "normales".
  • Les tableaux n'ont pas de taille fixe. Ils se développent et se réduisent automatiquement.

Dans ce qui suit, j'ai essayé de répertorier les alternatives PHP pour les méthodes les plus courantes ArrayList :

  • add(element) est fondamentalement juste en train d’ajouter via $array[] = $element. La nouvelle valeur obtient le prochain index numérique libre (c'est la méthode préférée). Vous pouvez également utiliser array_Push($array, $element) .
  • addAll(ArrayList): array_merge($array1, $array2) en quelque sorte. Soyez prudent lorsque vous fusionnez des tableaux associatifs. Les valeurs pour les mêmes clés seront écrasées.
  • clone(): Comme les tableaux ne sont pas des objets, vous "clonez" un tableau en l'attribuant simplement à une autre variable:

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

  • get(index): comme dans la plupart des langues: $val = $array[index];
  • indexOf(element): array_keys($array, $element) avec la valeur que vous recherchez comme second paramètre
  • isEmpty(): empty($array)
  • remove(index): Son unset($array[index])
  • remove(value) with value: Vous devez d'abord obtenir les clés (voir indexOf), les parcourir et les utiliser et utiliser unset.
  • size(): count($array)
46
Felix Kling

J'ai essayé d'implémenter, voici un code simple:

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

}
3
Carlos H

Si vous (ou toute autre personne qui lit ceci) voulez simplement (pour une raison quelconque) un fichier Java tel que ArrayList pour PHP, vous pouvez l'utiliser. 

Source complète: 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) 
    }
2
Orwellophile

en étendant la classe ArrayObject, vous pourrez peut-être créer facilement une classe de base (telle que Vector, Collection of ArrayList).

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

ou

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

Je n'ai aucune idée de ce qu'est cette "arrayList" (sonne en Java), mais s'il s'agit d'une liste de tableaux, l'équivalent PHP serait:

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

[modifier]

Si cette arrayList est simplement un tableau, vous pouvez utiliser

array(
    'item1',
    'item2'
)
1
Tom van der Woerdt

La ressemblance PHP la plus proche de la classe ArrayList de Java est la classe ArrayObject . Les noms de méthodes sont différents, mais les fonctionnalités entre les deux sont assez proches.

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