yayuj
yayuj

Reputation: 2464

Search in a container of objects with PHP

I have a container with some methods like add, get, and search, and within that class I have a variable that is an array holding instances of Car. How to make that object searchable by its name?

For example:

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

}

Upvotes: 0

Views: 57

Answers (1)

Ankh
Ankh

Reputation: 5728

You'd need some sort of iterative search like a foreach() or array_filter().

For example:

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

    return $matches;
}

Or

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

Upvotes: 1

Related Questions