2010-12-31 7 views
15

array以外のデータ構造体はphpにありますか? ArrayListのようなデータ構造を作成することは可能ですか?もしそうなら、いくつかの参考文献や何らかの実装を提供してください。ArrayList in PHP

+2

まず、配列と 'ArrayList'の違いを知る必要があります。 – BoltClock

+1

私はJavaでそれを知っています – Cooper

+1

私はあなたがPHP配列についてもっと読んでいく必要があると思います。 Javaで 'ArrayList'によって提供される余分な機能は、ほとんどの場合、PHP配列に組み込まれているか、グローバル関数(例えば' sort')で利用可能です。たとえば、http://php.net/manual/en/language.types.array.phpを参照してください。そのリンクは、Google検索の2番目のヒットであった:PHP配列リスト。あなたは簡単にそれを見つけることができました。 –

答えて

1
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' 
) 
+0

配列リストactullyは配列ですが拡張機能があります。配列のサイズを超えていても配列の新しい要素を追加するのに役立つpredefindeメソッドが存在する場合などです。たとえば、配列aのサイズが5で、要素番号6を追加する場合は、最後の要素を追加するために、サイズ5 + 1の新しい配列のすべての要素を書き直します。また、ソート.etc – Cooper

1

ArrayObjectクラスを拡張することで、簡単に基本クラスを作成することができます(Vector、Collection of ArrayListなど)。

42

アレイについて知りたいことはすべてdocumentationにあります。

配列の利用可能なすべての機能は、functions referenceにリストされています。

いくつかの注意:

  • 配列はもともとPHPで唯一のデータ構造でした。それが彼らがとても柔軟である理由です。それらは、スタック、キュー、配列、リスト、ハッシュテーブルなどとして使用されることを意図していました。 PHPの後半にspl Datastructuresが導入されました。
  • Javaとは異なり、PHPは純粋なOO言語ではありません。配列自体には、適用可能な組み込みのメソッドはありません。これは、「通常の」機能を介して行われなければならない。
  • 配列には固定サイズがありません。自動的に伸縮します。以下で

私は、最も一般的なArrayList methodsのための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():PHP用のArrayListのようなcount($array)
+1

umm、唯一のデータ構造ですか? http://php.net/manual/en/spl.datastructures.php – Gordon

+0

ポイントはどうなったのですか?私は組み込みのデータ構造についてもっと考えていました...しかし、正直言って私はどれがあなたにリンクされているのか知らないのです。私は何も意味する必要がないそれらを使用したことはありません。 –

+0

ちょっと@クーパー、この答えは正しいとマークしてください!これは、PHPの配列について知っておくべきことをすべて説明しています。それも私を助けた。 – Boris

2

あなた(または他の誰がこれを読んで)あれば、単純に(何らかの理由で)望んでいる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

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

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

} 
0

は、JavaからArrayListクラスに最も近いPHPらしさは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) 
}