PHP - Hashed dizi Endeksi eklemek?

1 Cevap php

i belirli bir türü (Kişi) nesneleri içerebilen bir dizi sarıcı sınıf PersonArray yazdı. Her kişi eşsiz bir tanımlayıcı olarak kimliği + Name döndüren eşsiz bir GetHash () işlevi vardır. Bu PersonArray gelen Kişinin hızlı alımı için izin verir. PersonArray aslında iki iç Diziler tutar. Kişi nesneleri ($ öğe) depolanması için bir, ve Hash değerleri ($ itemsHash) depolanması için.

Ben $ öğeleri dizisindeki [index] konumunda Person nesnesi koyar InsertAt (indeks, Kişi) işlevi oluşturmak istiyorum. Is there a way to insertAt a certain position in an array? If so how can I also update the $itemsHash of the PersonArray?

class Person {
    function getHash() {
        return $this->id . $this->name;
    }
}

class PersonArray implements Iterator {
    public $items = array();
    public $itemsHash = array();

    public function Find($pKey) {
        if($this->ContainsKey($pKey)) {
            return $this->Item($this->internalRegisteredHashList[$pKey]);
        }
    }

    public function Add($object) {
        if($object->getHash()) {
            $this->internalRegisteredHashList[$object->getHash()] = $this->Count();
            array_push($this->items, $object);
        }
    }
    public function getItems() {
        return $this->items;
    }

    function ContainsKey($pKey) {}

    function Count() {}

    function Item($pKey) {}

    //Iteration implementation
    public function rewind() {}
    public function current() {}
    public function key() {}
    public function next() {}
    public function valid() {}
}

1 Cevap

Bunu daha hızlı ve oldukça bunları yeniden uygulanması daha PHP'nin ilişkilendirilebilir diziler kullanmak daha kolay bulabilirsiniz.

Bir kenara da uygulayabilirsiniz basit IteratorAggregate aslında sadece bir dizi üzerinde yineleme eğer.

örneğin

class PersonArray implements IteratorAggregate {
    public $items = array();

    public function getItems() {
        return $this->items;
    }

    public function Add($object) {
        if($object->getHash()) {
            $this->items[$object->getHash()] = $object;
        }
    }

    public function Find($pKey) {
        if(isset($this->items[$pKey])) {
            return $this->items[$pKey];
        }
    }

    public function insertAt($index, $person) {
        $tmp = array_slice($this->items, 0, $index);
        $tmp[$person->getHash()] = $person;
        $tmp = array_merge($tmp, array_slice($this->items, $index));

        $this->items = $tmp;
    }

    //IteratorAggregate implementation
    public function getIterator() {
        return new ArrayIterator($this->items);   
    }
}