PHP nesnelerin bir dizideki her öğe üzerinde nesne yöntemi sonuçları ile dizi alın

4 Cevap

Ben nesneleri bir dizi var ve ben bunların her birinin bir yöntemin sonucu bir dizi dönüştürmek istiyorum. Ben sadece iyi yapabilirsiniz, ama belki buna bir temizleyici / daha iyi bir yaklaşım olup olmadığını merak ediyorum? Örneğin, bu ben ve nasıl ben şimdi yapıyorum çalışıyorum ne taklit:

$objects = array();

$objects[] = new Dog();
$objects[] = new Dog();
$objects[] = new Dog();

$data = array();
foreach ($objects as $obj) {
  $data[] = $obj->myMethod();
}

Açıkçası bu süper önemli değil, ama gelecekte $data $objects adlı üretmek için daha iyi yollar hakkında bilmek güzel olurdu. Herhangi bir fikir? I array_map() ya da bir şey gibi, bunun için bazı işlevi olduğunu düşünüyordum ama ben bulamıyorum.

4 Cevap

Eğer gerçekten PHP'nin array_map() Bu yapmak için kullanabilirsiniz

function cb($obj) { return $obj->myMethod(); }
.
.
$data = array_map(cb, $objects);

Eğer php 5.3 ya da daha iyisi varsa, kıvrımlara yol anonim fonksiyonları ile () array_map kullanmaktır:

$retArray = array_map(function($o){ $o->myMethod(); }, $myArray);

Eğer php 5.3 yoksa, siz) (elden önce işlev bildirmek zorunda ve array_map için işlev adını geçirmeden kalır

Yineleyicileri kullanarak imsi yaklaşım: Sen biraz daha OOP kullanabilirsiniz.

class TrainedDogIterator implements Iterator {
    // implement methods on http://php.net/iterator
    public function current() {
        $dog = current($this->dogs); // $this->dogs would be your objects
        $trained_dog = $this->_trainDog($dog);
        return $trained_dog;
    }
    private function _trainDog($dog) {
        // do something with dog
        return $dog;
    }
}

Sizin örnekte $data kullanmak nerede kullanın.

$di = new TrainedDogIterator($dogs);
foreach($di as $dog) {
    // $dog is trained
}

TMTOWTDI, array_walk array_map benzer şekilde çalışır, fakat yerinde dizi değiştirir. Olsa da array_map birden fazla dizi destekleme avantajı vardır:

http://us3.php.net/array%5Fwalk