web-dev-qa-db-ja.com

PHPのArrayList

phparray以外のデータ構造がありますか。 ArrayListなどのデータ構造を作成することはできますか?その場合は、いくつかの参照または何らかの実装を提供してください。

17
Cooper

配列について知っておくべきことはすべて documentation にあります。

配列で使用可能なすべての関数は、 関数リファレンス にリストされています。

いくつかのメモ:

  • 配列は元々PHPで唯一のデータ構造でした。それが彼らがとても柔軟な理由です。これらは、スタック、キュー、配列、リスト、ハッシュテーブルなどとして使用することを目的としていました。後でPHPは spl Datastructures を導入しました。
  • Javaとは異なり、PHPは純粋なOO言語ではありません。配列自体には、適用できる組み込みメソッドがありません。これは、「通常の」関数。
  • 配列のサイズは固定されていません。それらは自動的に拡大および縮小します。

以下では、最も一般的な ArrayListメソッド :の代替案PHPの選択肢をリストしようとしました。

  • 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) 2番目のパラメーターとして検索する値
  • isEmpty()empty($array)
  • remove(index):そのunset($array[index])
  • remove(value)の値:最初にキーを取得し(indexOfを参照)、キーを反復処理し、unsetを使用する必要があります。
  • size()count($array)
47
Felix Kling

私は実装しようとしましたが、ここにいくつかの簡単なコードがあります:

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

あなた(またはこれを読んでいる他の人)が(何らかの理由で)PHPのArrayListのようなJava)を単に必要とする場合、これを使用できます。

完全なソース: 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
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'
)
2

arrayObjectクラスを拡張することで、基本クラス(Vector、ArrayListのコレクションなど)を簡単に作成できる場合があります。

最も近いPHPに似ている ArrayList クラスfrom Javaは ArrayObject クラスです。メソッド名は異なりますが、2つの機能はかなり似ています。

 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