获取PHP中对象数组中每个项目的对象方法结果的数组

时间:2009-12-02 21:02:48

标签: php

我有一个对象数组,我想将它转换为每个对象的方法结果的数组。我可以做得很好,但我想知道是否有一个更清洁/更好的方法呢?例如,假装这是我正在使用的以及我现在是如何做的:

$objects = array();

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

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

显然这不是非常重要,但了解将来从$data生成$objects的更好方法会很好。有任何想法吗?我在想这里有一些功能,比如array_map()或其他东西,但我找不到它。

4 个答案:

答案 0 :(得分:1)

你确实可以使用PHP array_map()来执行此操作

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

答案 1 :(得分:1)

如果你有php 5.3或更高版本,更简洁的方法是使用带有匿名函数的array_map():

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

如果你没有php 5.3,那么你必须事先声明这个函数并将函数名传递给array_map()

答案 2 :(得分:1)

你可以使用更多的OOP:ish方法使用迭代器。

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

在示例中使用$data的地方使用它。

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

答案 3 :(得分:0)

TMTOWTDI,array_walkarray_map的工作方式类似,但是就地修改了数组。虽然array_map具有支持多个数组的优势:

http://us3.php.net/array_walk