PHP对象数组;获取$ object-> id == 2的对象

时间:2018-05-27 14:33:57

标签: php arrays object

我有“list_member”类:

class list_member
{
  public $id;
  public $email;
  public $lastchange;
  public $active;
  public $hash;
  public $list_id;

  function __construct($id,$email,$lastchange,$active,$hash,$list_id)
  {
    $this->id = $id;
    $this->email = $email;
    $this->lastchange = $lastchange;
    $this->active = $active;
    $this->hash = $hash;
    $this->list_id = $list_id;
  }
}

我有一个list_members数组。现在我想要获得具有唯一ID($ this-> id)的成员,例如42.

如果不循环整个数组并检查每一个条目,这怎么可能?

1 个答案:

答案 0 :(得分:1)

通过类成员搜索而不进行数组查找的一个选项是使用哈希表索引lookup属性。这会将处理器的负担转移到你的记忆中。

您可以通过添加id的静态地图并提供查找方法来修改原始类。由于id在这种情况下是唯一的,因此我演示了一个验证检查,如果您尝试实例化具有相同值的两个成员,则会通过抛出异常来停止执行。

class list_member
{
  public $id;
  public $email;
  private static $ids = array();

  function __construct($id,$email)
  {
    $this->id = $id;
    $this->email = $email;

    if ( array_key_exists( $id, self::$ids ) ) {
        throw new Exception('Item with id ' . $id . ' already exists.');
    }
    self::$ids[$id] = &$this;
  }

  public static function lookup_by_id($id) {
    return self::$ids[$id];
  }
}


new list_member(5, 'username1@email.com');
new list_member(15, 'username2@email.com');
new list_member(42, 'username3@email.com');
new list_member(45, 'username4@email.com');

$member = list_member::lookup_by_id(45);
echo $member->email; // username4@email.com