我有“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.
如果不循环整个数组并检查每一个条目,这怎么可能?
答案 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