使用PHP在对象的容器中搜索


Search in a container of objects with PHP

我有一个容器,其中有一些方法,如add, getsearch,并且在该类中我有一个变量,该变量是包含Car实例的数组。如何使对象可以通过其名称进行搜索?

例如:

class Container {
  private $cars = [];
  public function __construct(array $cars = [])
  {
    $this->cars = $cars;
  }
  public function add($key, Car $car)
  {
    $this->cars[$key] = $car;
  }
  public function get($key)
  {
    return $this->cars[$key];
  }
  public function search($car)
  {
    // ...
  }
};
class Car {
  private $name;
  public function __construct($name = null)
  {
    $this->name = $name;
  }
  public function setName($name)
  {
    $this->name = $name;
  }
  public function getName()
  {
    return $this->name;
  }
}

您需要某种迭代搜索,如foreach()array_filter()

例如:

public function search($car)
{
    $matches = array();
    foreach ($this->cars as $car) {
        if ($car->getName() === $car) {
            $matches[] = $car;
        }
    }
    return $matches;
}

public function search($car)
{
    return array_filter($this->cars, function ($v) use ($car) {
        return $v->getName() === $car;
    });
}